MySQL Schleife in Schleife

querytail

Erfahrenes Mitglied
Hallo zusammen,

ich möchte eine Abfrage in einer Schleife platzieren. Ist folgender Ansatz vom Aufbau richtig? In der Hauptsache geht es mir darum, dass die 2. Abfrage immer nur 1x durchgelaufen ist. Nach durchforsten des Netzes sollte es so gehen, aber das tut es nicht.

PHP:
$query = "select permid from action where assignment = 'new'";
		$caption = array();
		$result1 = mysql_query($query);
  		while ($row = mysql_fetch_array($result1)) {
		$caption[] = $row;
		}
		$query2 = "select id from user where '".$row['permid']."';
		
		foreach($caption as $row) {
		$result2 = mysql_query($query2);
		while ($row2 = @mysql_fetch_array($result2)) {
		$id = $row2['id'];
	
 		}
		mysql_data_seek ($result2, 0);
		}

Danke

querytail
 
Sieht richtig aus.
Zeurst leist du die Permission aus. Dann alle User mit dieser Permission. Das können natürlich mehrere sein.

Bitte spezifiziere 'aber das tut es nicht' genauer. Am besten gleich mit einem Beispiel in der Art
Das hab ich:
Code:
Tabelle mitarbeiter
id | firma_id | name
--------------------
1  | 1        | MA1
2  | 1        | MA2
3  | 2        | MA3

Tabelle Firma
id | name
---------------------
1  | firma1
2  | firma2

Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code:
firma_id | firma_name | anzahl_mitarbeiter
------------------------------------------
1        | firma1     | 2
2        | firma3     | 1
 
Hallo,

Ich möchte alle neuen Aktionen abrufen und diese den Usern mit time = "new" zuordnen:

Code:
Tabelle action
id | name| permid
--------------------
1  | xx        | new
2  | xy        | old
3  | xz        | new

 
Tabelle user
id | time
---------------------
1  | new
2  | new


Danke

querytail
 
Dein Problem ist relativ einfach.

Für die erste Abfrage machst du eine while-Schleife. Die zweite Abfrage soll bei jedem Durchlauf (und somit bei jedem Eintrag) dieser while-Schleife ausgeführt werde. Somit musst du die zweite Abfrage einfach in die erste Schleife setzen.

Beispiel:
PHP:
$qry = "SELECT * FROM eintraege";
$result = mysql_query($qry);
while($row = mysql_fetch_object($result))
{
    $aktuelle_id = $row->id;
    $inner_qry = "SELECT * FROM eintraege2 WHERE id={$row->id}";
    $inner_result = mysql_query($inner_qry);
    while($inner_row = mysql_fetch_object($inner_result))
    {
        //irgendwas mit den unter-ergebnissen anfangen...
    }
}
 
Schai dir mal JOINs an ;) (Queries in Schleifen zeugen von schlechtem Softwaredesign/Datenbankdesign)

Und mit dem $row['permid'] scheint was falsch zu sein im 2ten Query.... da steht ja immer der selbe wert drin, was deine Schleife sinlos macht.
 
Hmmm, oben habe ich ja auch die beiden while-Schleifen ineinander. Leider stoppt das ganze immer nach dem ersten Durchgang. Ich werde das aber mal so versuchen.

Dankeschön...!
 
Schai dir mal JOINs an ;) (Queries in Schleifen zeugen von schlechtem Softwaredesign/Datenbankdesign)

Und mit dem $row['permid'] scheint was falsch zu sein im 2ten Query.... da steht ja immer der selbe wert drin, was deine Schleife sinlos macht.

Aber wie schaut denn so ein Join aus, der mir aus der ersten Tabelle die Werte liefert, die in der 2. Tabelle abgefragt werden.
 
Nein du hast oben nicht die Schleifen ineinander, musst mal kucken wo die Klammer endet. ;)
Sieht man nicht gut, weils schlecht formatiert ist. Ich formatier dir deins mal, dann siehst du den Fehler.

PHP:
$query = "select permid from action where assignment = 'new'";
$caption = array();
$result1 = mysql_query($query);
while ($row = mysql_fetch_array($result1)) 
{
     $caption[] = $row;
}

$query2 = "select id from user where '".$row['permid']."';
foreach($caption as $row) 
{
     $result2 = mysql_query($query2);
     while ($row2 = @mysql_fetch_array($result2)) 
     {
          $id = $row2['id'];
     }
     mysql_data_seek ($result2, 0);
}
 
Zuletzt bearbeitet:
Zurück