MySQL -> PHP Problem

xamunrax

Erfahrenes Mitglied
Hallo,
ich habe ein Query das in mehreren Tabellen seine Informationen sammelt und dann zurück gibt, das Problem ist wie folgt, er holt aus zwei tabellen ein attribut mit dem namen "Name" nun wenn ich es ausgeben will, gibt er mir das erste attribut aus, aber ich brauche beide...

kleines BSP:

PHP:
      $query = "SELECT *
                     FROM produkte p
                     JOIN produktdetails pd
                     JOIN hersteller h
                     WHERE p.pd_FID = pd.id
                     AND p.hersteller_ID = h.id";
     $sql->query($query);
     $num_rows = $sql->num_rows();
     for($i=0;$i<$num_rows;$i++){
         $db->next_record();
         echo "Name des Herstellers:".$sql->f(h.name);
         echo "Name des Produktes :".$sql->f(p.name);
     }

$sql->f() steht für den standart record-befehl von mysql
$sql->next_record() steht für den nächten Datensatz
$sql->num_rows() Steht für die Anzahl der datensätze...

Nun in dem Beispiel oben bekomme ich garnichts ausgegeben (also zumindest nichts aus der DB)

mache ich nun aber folgendes:

PHP:
     for($i=0;$i<$num_rows;$i++){
         $db->next_record();
         echo "Name des Herstellers:".$sql->f(name);  // ohne "h."
         echo "Name des Produktes :".$sql->f(name); // ohne "p."
     }

Nun bekomme ich beide nur vom hersteller, was ja auch eigendlich klar ist aber wie kann ich das lösen ?


danke im vorraus...

MfG Marco
 
In dem Fall darfst Du nicht mit SELECT * arbeiten, sondern musst die Felder einzeln auflisten und bei kollidierenden Feldern Aliasnamen vergeben:
Code:
SELECT
h.name AS hName,
p.name AS pName,
weitere Felder 
FROM ....
Zugriff auf die Felder bekommst Du dann entsprechend mit $sql->f(hName) und $sql->f(pName). Aber warum übergibst Du Konstanten? Müsste das nicht eigentlich ein String-Bezeichner ($sql->f('hName') und $sql->f('pName')) sein?

PS: JOIN's sind schneller, wenn Du die Bedingung mit ...JOIN Tabelle2 ON (Tabelle1.ID = Tabelle2.t1ID)... anstatt in der WHERE-Klausel machst.
 
Eigentlich sollte es jedoch auch möglich sein, die einzelnen Felder mittels $sql->f('h.name') bzw. $sql->f('p.name') abzufragen – solange die Funktion f() darauf ausgelegt ist.

Denn auch mit anderen PHP-MySQL-Funktionen lassen sich auf Ergebnisse mit assoziativen Schlüsseln nach dem Schema <Tabellenname>.<Feldname> zugreifen. (Siehe mysql_result())
 
Gumbo hat gesagt.:
Eigentlich sollte es jedoch auch möglich sein, die einzelnen Felder mittels $sql->f('h.name') bzw. $sql->f('p.name') abzufragen – solange die Funktion f() darauf ausgelegt ist.

Denn auch mit anderen PHP-MySQL-Funktionen lassen sich auf Ergebnisse mit assoziativen Schlüsseln nach dem Schema <Tabellenname>.<Feldname> zugreifen. (Siehe mysql_result())

das habe ich mir auch so gedacht aber scheinbar ist dem nicht so, zumindest funktioniert es bei mir nicht... :(

hier mal meine f() funkion
PHP:
  function f($attribut_name) {
    return $this->record[$attribut_name];
  }
 
Zurück