SELECT Abfrage in einer WHILE Schleife?

tomtutorial

Erfahrenes Mitglied
Guten morgen,

weiß einer von euch ob es überhaupt möglich ist eine SELECT Abfrage in eine WHILE Schleife zu setzen, um dem entsprechen Ergebnisse zu bekommen?

Oder ist an meinem Script irgent ein Fehler:

PHP:
<?php
$unterkategorien = @mysql_query("SELECT id, name FROM unterkategorie ORDER BY name");

while ($kat = mysql_fetch_array($unterkategorien)) {
  $nr = $nr+1;
  $ukatid   = $kat["id"];
  $ukatname = htmlspecialchars($kat["name"]);
  
  $hauptkategorien = @mysql_query("SELECT katid, name FROM katlink, kategorien WHERE kategorien.id = $ukatid");
  $katzuordnung = $hauptkategorien["name"];
  
  echo("<tr onMouseOver=\"this.bgColor='#eeeeee'\" onMouseOut=\"this.bgColor=''\">".
  		"<td>$nr</td>".
  		"<td><li>$ukatname</td>".
  		"<td>$katzuordnung</td>".
  		"<td>[<a href='index.php?link=editkat&katid=$ukatid'>Bearbeiten</a>&nbsp;|&nbsp;".
       "<a href='index.php?link=deletekat&katid=$ukatid'>L&ouml;schen</a>]</td></tr>\n");
}

?>

In der ECHO Ausgabe mit der Variablen $katzuordnung bleibt leer!!!

TOM
 
-

PHP:
 $hauptkategorien = @mysql_query("SELECT katid, name FROM katlink, kategorien WHERE kategorien.id = $ukatid");

  $katzuordnung = $hauptkategorien["name"];
Da fehlt dir ein mysql_fetch_array() dazwischen.

Allerdings würde ich dir empfehlen, auf die SQL-Abfragen in der Schleife zu verzichten und lieber alles in einer Abfrage abzuwickeln.
PHP:
$sql = "Select kategorien.katid, kategorien.name, unterkategorie.name from kategorien, unterkategorie where kategorien.id = unterkategorie.id";
Ohne Gewähr, aber in diesem Stile.
 
Klar kannst du abfragen schachteln.

du solltest nur darauf achten die Bedingung der laufenden While schleife nicht ungewollt zu aendern.
Sprich nicht wiederum $kat als Bezeichner für dein RecordSetz zu verwenden.

Besser ist aber wie Caminus schon sagte dies in einem sinnvollen Query zu verwirklichen.
Gibt aber genügend Situationen in denen dies weniger Sinn macht.
 
Die Select Abfrage in einem Join zu verarbeiten geht leider nicht.

Erklärung:

Es handelt sich hierbei um eine Liste der Unterkategorien. In der nächsten Zelle sollte die dazu gehörige Hauptkategorie aufgelistet sein.

Die Unter- & Hauptkategorien sind zwei Tabellen in mySQL, die mittels einer dritten Tabelle verküpft sind.

Das mit dem mysql_fetch_array habe ich ausprobiert, aber funtzt nicht. Im PHP Referenz Handbuch kommt diese Funktion auch nur in einer WHILE Schleife vor, was aber nicht sein darf.
Oder kann man die Funktion mysql_fetch_array auch ohne eingene WHILE Schleife setzten?

Das wäre dann eine WHILE Schleife in einer WHILE Schleife, welche mir die Tabelle total zerschiessen würde (bildlich gesehen!!!).

TOM
 
Wenn man lang genug rumtüfftelt, funktioniert es auch!!!

Mein Fehler lag nicht in der PHP Programmierung, sondern in der SQL Abfrage!

Hier mein funktionierender Quellcodeschnipsel:

PHP:
<?php
$unterkategorien = @mysql_query("SELECT id, name FROM unterkategorie ORDER BY name");

while ($kat = mysql_fetch_array($unterkategorien)) {
  $nr = $nr+1;
  $ukatid   = $kat["id"];
  $ukatname = htmlspecialchars($kat["name"]);
  
  $hauptkategorien = @mysql_query("SELECT kategorien.id, kategorien.name, katid, ukatid FROM kategorien, katlink WHERE katid = id AND ukatid = $ukatid");
  $katx = mysql_fetch_array($hauptkategorien);
  $katzuordnung = $katx["name"];
  
  echo("<tr onMouseOver=\"this.bgColor='#eeeeee'\" onMouseOut=\"this.bgColor=''\">".
  		"<td>$nr</td>".
  		"<td><li>$ukatname</td>".
  		"<td>$katzuordnung</td>".
  		"<td>[<a href='index.php?link=editkat&katid=$ukatid'>Bearbeiten</a>&nbsp;|&nbsp;".
       "<a href='index.php?link=deletekat&katid=$ukatid'>L&ouml;schen</a>]</td></tr>\n");
}

?>

TOM
 
Zurück