j4nk3y: Kleines Logisches/Syntax Problem

Beitrag lesen

Morgen Christian,

Das sollte eine 1:n verbindung sein zu dem Werte paar aus Tab1 kommen mehrere Zeilen in Tab2, in phpmyadmin wird die resultierende tabelle aus der Abfrage korrekt angezeigt. Und dementsprechend würden die Daten doch auch in einem Mehrdimensionalen Array gespeichert werden, oder?

Bei einem JOIN wird ein karthesisches Produkt aus der linken Zeile und den zu joinenden Zeilen gebildet. Wenn du also eine 1:n-Verbindung hast, dann bekommst du für jede n-Zeile eine Zeile in Result-Set. Beispiel:

CREATE TABLE t1 (
  id INTEGER PRIMARY KEY
);

CREATE TABLE t2 (
  id INTEGER PRIMARY KEY,
  t1_id INTEGER NOT NULL REFERENCES t1(id)
);

INSERT INTO t1 (id) VALUES (1);
INSERT INTO t2 (id, t1_id) VALUES (1, 1);
INSERT INTO t2 (id, t1_id) VALUES (2, 1);

SELECT * FROM t1 LEFT JOIN t2 ON t1_id = t1.id;

Das gibt dieses Resultset:

id | id | t1_id 
----+----+-------
  1 |  1 |     1
  1 |  2 |     1
(2 rows)

Ich weiss jetzt nicht, was PHPMyAdmin da macht, aber wenn es etwas anderes darstellt, dann ist das eine Aufbereitung dessen, was die Datenbank liefert.

phpMyAdmin macht genau das. Das ist auch gut so und genau das möcht ich erstmal erreichen.

Du musst also, um alle Zeilen zu bekommen, mysql_fetch_array so oft aufrufen, bis es FALSE zurück gibt. Jede Zeile enthält dann die Zeile aus der ersten Tabelle und eine weitere Zeile aus der zweiten Tabelle.

$i = 1;
$query = "SELECT `Tab1`.`Wert1`,`Tab1`.`Wert2`,`Tab2`.`Wert3` FROM `Tab1` LEFT JOIN `Tab1` ON (`Tab2`.`var`=`Tab1`.`var`) WHERE `Tab1`.`var`=$i";
$result = mysql_query($query);

echo '<table border="1">';
while ($arr = mysql_fetch_array($result))
{
        echo "<tr>";
        echo "<td>". $arr['wert1'] . "</td>";
        echo "<td>". $arr['wert2'] . "</td>";
        echo "<td>". $arr['wert3'] . "</td>";
        echo "</tr>";
}
echo "</table>";
echo '</br>';
echo '<table border="1">';

Soweit zur Ausgabe. Aber die braucht man ja nicht immer, wie krieg ich das in ein mehrdimensionales Array bei dem ich jeden Wert (Float) einzeln ansprechen kann? Denn dann kann ich mich wieder meinem Anfangsproblem witmen... Nachdem ich dann alles auf MySQLi umgeschrieben hab.

Gruß

Jo