如何将一个mySQL表的值连接到另一个表的值?

时间:2015-07-14 16:00:15

标签: php mysql

我的mySQL数据库中有两个表:

表&#34>动物":

|   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表格&#34; animal&#34; 动物名称。如果是,则在位置 b 打印名称。如果无名称打印动物

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

感谢您的回答!我现在尝试使用 Jayo2k 的答案。我需要在我的问题上做一点改变,我发现我犯了一点错误。所以在这里我尝试尽可能具体地描述我需要的东西:

表&#34>动物&#34;:

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

表&#34;订单&#34;:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我所做的是(我正在使用PDO):

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

它将选择动物和命令表,并从动物的动物行的命令中联合动物行。

你应该得到一个像这样的数组

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

现在由你来做你想要的所有修改