2015-07-14 14 views
5

Ho due tabelle nel mio database MySql:Come posso collegare un valore di una tabella mySQL ad un valore di un'altra tabella?

tabella "animali":

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

tabella "ordini":

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

All'inizio seleziono dalla tabella "ordini" del dati seguenti:

<?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(); 
    ?> 

Ora voglio controllare se nella mia tabella mySQL "ani mal "l'animale ha un nome . Se si stampa in posizione b il nome. Se non v'è alcun nome stampa il animale:

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

Grazie per le vostre risposte! Ho provato a lavorare ora con la risposta di Jayo2k. Ho bisogno di fare un piccolo cambiamento nella mia domanda, ho scoperto che ho fatto un piccolo errore. Così qui provo a descrivere quello che mi serve il più specifici possibile:

tabella "animali":

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

tabella "ordini":

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

Con questo codice da 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(); 
    ?>  

... Ottengo questo risultato:

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

Ma quello che mi serve è:

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

risposta

5

È possibile utilizzare LEFT JOIN, e utilizzare la condizione IF per controllare il valore non è vuoto, insieme a IFNULL, che renderà i valori null in colonne per vuoto.

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 che abbiano un senso !!ricorderò in anticipo :) - Grazie –

+1

Questa è stata la risposta perfetta! – Jarla

0

Quello che faccio è (sto usando DOP):

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

selezionerà sia gli animali e tabella Ordini e congiunta della fila degli animali da ordini con la riga animale da animale.

si dovrebbe ottenere un array come questo

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

Ora tocca a voi per fare tutte le modifiche che si desidera

+0

Grazie mille! Ho dovuto fare una piccola correzione nella mia domanda ma ho provato a lavorare con il tuo codice suggerito. Ho modificato la mia domanda sopra per spiegarti il ​​mio problema – Jarla

Problemi correlati