SQL-Anweisung & While-Schleife ?

Barry007

Grünschnabel
Hallo, ich steck mal wieder fest,

ich möchte die freien Stellen zu verschiedenen Berufen ermitteln, in PHP kein Problem:

PHP:
<?php
  mysql_connect("","root");
  mysql_select_db("agentur"); 
  
  // Anzahl aller Berufe ermitteln und ausgeben
  $res1 = mysql_query("select * from beruf order by beruf asc");
  $num1 = mysql_num_rows($res1);
  
  echo "<h2>Es gibt $num1 verschiedene Berufe.</h2>";
  
  echo "<table>";
  echo "<tr><td><b>Beruf</b></td><td><b>Pl&auml;tze</b></td></tr>";
  
   while ($dsatz = mysql_fetch_assoc($res1))
  {     
      // Anzahl der belegten Stellen zu einem Beruf
      $sqlab2 = "select beruf from person where beruf like '" .$dsatz["beruf"] . "'";
      $res2 = mysql_query($sqlab2);
      $num2 = mysql_num_rows($res2);
      
      $erg = $dsatz["anzahl"] - $num2;
      
      // Ausgabe des Berufs und der freien Stellen
      
      echo "<tr>";
      echo "<td>".$dsatz["beruf"]. "</td><td align='right'>$erg</td>";
      echo "</tr>";
  }
  echo "</table>";
  ?>

Doch in Access schon eher,

Die Anzahl der Berufe ermitteln auch nicht so schwer:

Code:
'Anzahl der Berufe'
    sql = "SELECT Count(*) AS Anzahl FROM Berufe "
    Me.RecordSource = sql
    Me!txt_Anzahl.ControlSource = "Anzahl"

Doch jetzt ist die frage: Kann ich über eine Select-Anweisung in SQL alle Inhalte einer Tabelle lesen und diese dann wie in dem PHP-Code in einer While-Schleife verwenden um die freien Stellen zu ermitteln?

Bin um jede hilfe Dankbar
 
Code:
select b.beruf,(b.anzahl- (select count(*) from person p where p.beruf = b.beruf)) as anzahl from beruf b order by beruf asc

Die Query ist ungetestet, soll dir aber eine Idee liefern wie Du es berechnen könntest.

Gruß
 
Um die Berechnung geht es nicht unbedingt, sondern eher um die Ausgabe auf das Formular,

Beruf | freie Stellen

Feuerwehr | 12
TV-Studio | 8

Das muss wohl über ein array passieren oder?
aber wie mach ich das, dass jeweils dann der Beruf ausgegeben wird und dann die freien Stellen

Die Berechnung ist ja folgende:

Ich hab in einer Tabelle Berufe den jeweiligen Beruf und die max_Anzahl in einer Zeile.

In einer anderen Tabelle habe ich dann die Person und den Beruf stehen.

Die Anzahl aller Personen zu einem Beruf wird mit count ermittelt,
dann die Anzahl der Personen die einen Beruf gewählt haben mit der max_Anzahl aus der Anderen Tabelle(Berufe) subtrahiert und ausgegeben.

Muss doch über eine While-Schleife geschehen, damit jeder Datensatz nacheinander berechnet wird und dann ausgegeben.

Ich hab von Access eigentlich keinen Plan, muss das nur machen weil das mit einem anderen Programm verwendet werden soll
 
Meine bisherigen Codeschnippsel:

Code:
Private Sub Form_Load()
sql = "SELECT Count(*) AS AlleBerufe FROM Berufe"
Me.RecordSource = sql
Me!txt_Anzahl.ControlSource = "AlleBerufe"

be = "SELECT Beruf From Berufe"
anzBeruf = "SELECT Anzahl From Berufe"

While (be)
anz = "SELECT Count(*) AS anzBeruf FROM Personen WHERE Beruf LIKE = be"
Wend
End Sub

Dann muss noch berechnet werden:

erg = anzBerufe - anz

Ist die frage, ob das die richtige Vorgehensweise ist, und wie ich die Daten dann auf dem Formular untereinader anzeigen kann.
Desweiteren sollen die Daten alle paar Sekunden aktualisieren.
 
Zuletzt bearbeitet:
So, nun eine ander vorgehensweise, ich hab jetzt diese SQL-Anweisung:

Code:
SELECT Berufe.Beruf, Berufe.Stellen-P.BesetzteStellen AS FreieStellen
FROM Berufe, (SELECT Personen.Beruf, Count(Personen.name) as BesetzteStellen FROM Personen GROUP BY Personen.Beruf) AS P
WHERE Berufe.Beruf=P.Beruf;

Doch weis ich nicht wo ich diese Eintragen muss um den Beruf und die freien Stellen anzeigen zu lassen. Ich hab sie in Datenherkunft eingetragen doch kommt dann immer die Meldung:

"Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck "berufe.anzahl-count(personen.beruf)' nicht als Teil der Aggregatfunktion einschließt."

Was mach ich falsch? Muss ich noch eine Abfrage erstellen?
Aber was für eine und wie?

Bitte helft mir, bin über jede Hilfe dankbar.
 
Zuletzt bearbeitet:
So hab das ergebniss für die die daran interessiert sind.

Code:
SELECT 
   Berufe.Beruf, 
   Berufe.Stellen-NZ(P.BesetzteStellen,0) AS FreieStellen
FROM 
   Berufe 
Left Join 
   (SELECT Personen.Beruf, Count(Personen.name) as BesetzteStellen FROM Personen GROUP BY Personen.Beruf) AS P
ON Berufe.Beruf=P.Beruf;

Hier wird die Berechnung über die SQL-Anweisung als Abfrage gespeichert und durchgeführt.
 

Neue Beiträge

Zurück