2015-07-14 12 views
5

Ich habe zwei Tabellen in meiner mySQL Datenbank:Wie kann ich einen Wert einer mySQL-Tabelle mit einem Wert einer anderen Tabelle verbinden?

Tisch "Tiere":

| animal | name  | 
|:-----------|------------:| 
| cat  |  Tom  | 
| dog  |    | 

Tabelle "Aufträge":

|  id  | animal | 
|:-----------|------------:| 
|  1  |  cat  | 
|  2  |  dog  | 

Zuerst wähle ich aus der Tabelle "Aufträge" der folgende Daten:

<?php 
    $pdo = Database::connect(); 
    $sql = 'SELECT * FROM orders ORDER BY id ASC'; 
    foreach ($pdo->query($sql) as $row) { 

    echo ('<td>a:'.$row['id'].'</td>');  
    echo ('<td>b:'.$row['animal'].'</td>'); 
    echo ('<td>c:'.$row['animal'].'</td>');   

    } 
    Database::disconnect(); 
    ?> 

Jetzt möchte ich überprüfen, ob in meiner mySQL-Tabelle "ani Mal "Tier hat eine Name. Wenn ja, drucken Sie an der Position b die Name. Wenn es kein Name Druck der Tier:

|  a:1  |  b:Tom  |  c:cat  | 
|  a:2  |  b:dog  |  c:dog  | 

Vielen Dank für Ihre Antworten! Ich habe versucht, jetzt mit der Antwort Jayo2k zu arbeiten. Ich muss eine kleine Änderung in meiner Frage machen, ich fand heraus, dass ich einen kleinen Fehler gemacht habe. Also hier versuche ich zu beschreiben, was ich brauche, so genau wie möglich:

Tisch "Tiere":

| name  | animal | 
|:-----------|------------:| 
| Tom  |  cat  | 
| Jerry |  dog  | 
| Alfred | duck  | 
| Sam  |    | 
| Donald |    | 

Tabelle "Aufträge":

|  id  | animal | 
|:-----------|------------:| 
|  1  |  cat  | 
|  2  |  dog  | 
|  3  |  duck | 
|  4  |  frog | 
|  5  |  pig  | 

Mit dem folgenden Code aus Jayo2k ...

<?php 
    $pdo = Database::connect(); 
    $sql = "SELECT * FROM animals, orders WHERE orders.animal = animals.animal"; 
    foreach ($pdo->query($sql) as $row) { 

    echo '<tr> '; 
    echo('<td>a:'.$row['id'].' </td>'); 
    echo('<td>a:'.$row['animal'].' </td>'); 
    echo('<td>b:'.$row['name'].' </td>'); 
    echo '</tr> '; 

    } 
    Database::disconnect(); 
    ?>  

... ich dieses Ergebnis:

|  a:1  |  b:cat  |  c:Tom  | 
|  a:2  |  b:dog  |  c:Jerry | 
|  a:3  |  b:duck |  c:Alfred | 

Aber was ich brauche, ist:

|  a:1  |  b:cat  |  c:Tom  | 
|  a:2  |  b:dog  |  c:Jerry | 
|  a:3  |  b:duck |  c:Alfred | 
|  a:4  |  b:frog |  c:frog | 
|  a:5  |  b:pig  |  c:pig  | 

Antwort

5

Sie LEFT JOIN verwenden können, und verwenden Sie die IF Bedingung den Wert zu überprüfen, nicht leer ist, zusammen mit IFNULL, dass Nullwerte in Spalten machen leer.

SELECT O.id, IF(IFNULL(A.name, '') = '', A.animal, A.name) name, A.animal 
FROM orders O 
LEFT JOIN animals A 
    ON O.animal = A.animal 
ORDER BY O.id DESC 
+0

@JayBlanchard, die Sinn machen !!wird im Voraus beachten :) - Danke –

+1

Dies war die perfekte Antwort! – Jarla

0

Was ich tue, ist (ich bin mit gU):

SELECT * FROM animal, orders WHERE orders.animal = animals.animal 

Es sowohl Tiere als auch Auftragstabelle und gemeinsame das Tier Reihe von Aufträgen mit dem Tier Reihe von Tier wählen wird.

Sie ein Array wie diese

[0] => 
     id = 1 
     name = tom 
     animal = cat 
[1] => 
     id = 2 
     name = 
     animal = dog 

jetzt bis Sie bekommen sollten alle Änderung tun möchten Sie

+0

Vielen Dank! Ich musste in meiner Frage eine kleine Korrektur vornehmen, aber ich habe versucht, mit Ihrem vorgeschlagenen Code zu arbeiten. Ich habe meine Frage oben bearbeitet, um Ihnen mein Problem zu erklären – Jarla

Verwandte Themen