2015-07-14 3 views
5

У меня есть две таблицы в моей базе данных MySQL:Как подключить значение одной таблицы mySQL к значению другой таблицы?

таблица «животных»:

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

таблице «Заказы»:

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

Сначала я выбрать из таблицы «упорядочивает» следующие данные:

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

Теперь я хочу проверить, есть ли в моей таблице mySQL «ani mal "животное имеет имя. Если да, напечатайте в позиции bимя. Если нет нет имени напечатать животное:

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

Спасибо за ваши ответы! Я попытался работать сейчас с ответа Jayo2k. Мне нужно немного изменить свой вопрос, я узнал, что сделал небольшую ошибку. Так вот я пытаюсь описать то, что мне нужно как можно конкретнее:

таблицы "животные":

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

таблице "Заказы":

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

С помощью следующего кода из 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(); 
    ?>  

... Получаю результат:

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

Но что мне нужно:

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

ответ

5

Вы можете использовать LEFT JOIN и использовать условие IF проверить значение не пусто, наряду с IFNULL, что будет делать нулевые значения в столбцах пустой.

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, которые имеют смысл !!будем помнить о будущем :) - Спасибо –

+1

Это был прекрасный ответ! – Jarla

0

Что я делаю (я использую PDO):

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

Он подберет как животное, так и стол заказов и совместное животное строку из заказов с животным рядом от животного.

вы должны получить массив, как этот

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

Теперь до вас, чтобы сделать все изменения вы хотите

+0

Большое спасибо! Мне пришлось внести небольшую коррекцию в мой вопрос, но я попытался работать с вашим предлагаемым кодом. Я отредактировал мой вопрос выше, чтобы объяснить вам мою проблему – Jarla

Смежные вопросы