sceiler: Daten aus 2 Tabellen ausgeben

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

  1. Teste die SQL-Anweisung doch erst einmal in einer Shell... Es fehlt eine Bedingung für die Auswahl aus der Tabelle company

    Fred

    1. 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?

      1. 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

  2. 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.

    1. 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.

      1. 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

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. 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'];  
           .  
           .  
           .  
          }
          
          1. 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

  3. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.