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

5
我在我的MySQL数据库中有两个表:
表 "animals":
|   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表"animal"中的动物是否有一个名字。如果有,在位置b打印名字。如果没有名字,则打印动物本身。
|      a:1     |     b:Tom     |      c:cat     | 
|      a:2     |     b:dog     |      c:dog     | 

谢谢你的回答! 我现在尝试根据 Jayo2k 的回答来工作。我需要对我的问题进行一些小改变,我发现我犯了一个小错误。因此,在这里我尽可能详细地描述我需要的内容:

表 "animals":

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

表 "orders":
|     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个回答

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
这是完美的答案! - peace_love

0

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

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

它将选择动物和订单表,并将来自订单的动物行与来自动物的动物行联接。

您应该获得类似于这样的数组

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

现在轮到你做所有想要的修改了


非常感谢!我必须对我的问题进行一些小的更正,但我尝试使用您建议的代码。我编辑了上面的问题,以向您解释我的问题。 - peace_love

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接