Daten aus 2 Tabellen ausgeben
sceiler
- php
Hallo,
ich habe ein kleines Problem mit einer MySQL Abfrage und der zuständigen Ausgabe mittels PHP.
$query = mysql_query("SELECT m.*, c.name
FROM main m, company c
WHERE m.stateId = '2'
GROUP BY m.id");
Wenn ich nun versuche mittels
while($row = mysql_fetch_assoc($query))
{
echo ' <tr>
<td>'.$row['c.name'].'</td>
</tr>';
}
Den Namen auszugebe bekomme ich die Fehlermeldung "undefined index: c.name"
Bei nur einer Tabelle (FROM main) und dann $row['id'] funktioniert es einwandfrei
Teste die SQL-Anweisung doch erst einmal in einer Shell... Es fehlt eine Bedingung für die Auswahl aus der Tabelle company
Fred
Teste die SQL-Anweisung doch erst einmal in einer Shell... Es fehlt eine Bedingung für die Auswahl aus der Tabelle company
In der Shell kann ich ja c.name benutzen nur in php versteht er c.name nicht.
In den beiden Tabellen habe ich ja Felder mit der gleichen Bezeichnung, z. B. ID...
Wie unterscheide ich in PHP zwischen der ID?
Wie unterscheide ich in PHP zwischen der ID?
Wieso in PHP?
SELECT
`tabelle`.`spalte` AS `nickname`,
`andere_tabelle`.`spalte` AS `anderer_nickname`
FROM
`tabelle`,
`andere_tabelle`
WHERE
`tabelle`.`spalte` == `andere_tabelle`.`spalte`
Fred
Das heißt in der Ausgabe nur name, ohne c.
Ein htmlspecialchars wäre noch angebracht.
Funktioniert das so wirklich? Du verknüpfst da zwei Tabellen ohne Kriterien, welche Zeile aus A mit welcher aus B verbunden werden soll.
GROUP BY auf einen Wert mit etlichen anderen Werten in der Rückgabe wird auch nicht funktionieren.
Das heißt in der Ausgabe nur name, ohne c.
Und was ist wenn in beiden Tabellen es ein Feld name gibt? Woher weiß php welches gemeint ist, wenn ich nicht c.name benutzen kann?
Funktioniert das so wirklich? Du verknüpfst da zwei Tabellen ohne Kriterien, welche Zeile aus A mit welcher aus B verbunden werden soll.
GROUP BY auf einen Wert mit etlichen anderen Werten in der Rückgabe wird auch nicht funktionieren.
Hab das mit der Bedingung korriegiert.
Hi,
Und was ist wenn in beiden Tabellen es ein Feld name gibt? Woher weiß php welches gemeint ist, wenn ich nicht c.name benutzen kann?
Du kannst "AS" benutzen im SQL und eindeutige Namen vergeben.
Hab das mit der Bedingung korriegiert.
Dann darfst Du jettz noch das "korriegert" korrigieren ;-)
cu,
Andreas
Du kannst "AS" benutzen im SQL und eindeutige Namen vergeben.
Ich kann das momentan nicht ausprobieren aber habe ich es richtig verstanden, dass ich bei 2 Tabellen die zum Teil selbe Felderbezeichnung habe diese mittels AS einzigartige Namen geben muss?
Beispiel:
Tabelle Volkswagen(ID, PS, Farbe, Modell, Motorart)
Tabelle Audi(ID, PS, Farbe, Modell, Motorart)
Ich möchte alle Infos haben, also:
SELECT v.ID AS vwID, v.PS as vwPS, ..., a.ID AS aID, a.PS AS aPS,...,
FROM Volkswagen v, Audi a
WHERE bla bla...
Um es nun darzustellen auf meiner Webseite/Tool:
$query = mysql_query("SELECT v.ID AS vwID, v.PS as vwPS, ..., a.ID AS aID, a.PS AS aPS,...,
FROM Volkswagen v, Audi a
WHERE bla bla...");
while($row = mysql_fetch_assoc($query))
{
$row['vwID'];
$row['aID'];
.
.
.
}
Beispiel:
Tabelle Volkswagen(ID, PS, Farbe, Modell, Motorart)
Tabelle Audi(ID, PS, Farbe, Modell, Motorart)
Nimm es mir nicht übel - aber das ist, um es äußerst bis überzogen zurückhaltend zu sagen, "evident suboptimal".
Besser:
Tabelle AutoTypen(ID, Hersteller, Typ, Modell, PS, Farbe, Motorart)
Zu Deiner Frage: Wenn Du zwei Tabellen abfragen willst, die gleiche Spalten (und darin gleiche Datentypen) haben, dann bietet sich das UNION-Statement an.
also mit dem obigen Murks:
SELECT ID
, PS
, Farbe
, Modell
, Motorart
FROM VOLKSWAGEN
UNION
SELECT ID
, PS
, Farbe
, Modell
, Motorart
FROM AUDI
Fred
Hi,
[code lang=php]$query = mysql_query("SELECT m.*, c.name
FROM main m, company c
<td>'.$row['c.name'].'</td>
Stehen die Spalten-"Vornamen" wirklich hier mit drin?
Ich würde davon ausgehen, daß dort nur $row['name'] definiert ist.
Was ergibt ein var_dump auf $row?
Daß die Einschränkung auf bestimmte Datensätze der Tabelle company fehlt, wurde ja schon erwähnt.
cu,
Andreas