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

标签 php 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 表“animal”中,animal 是否有一个名称。如果是,则在 b 位置打印 name。如果没有没有名字打印动物:

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

最佳答案

您可以使用 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

关于php - 如何将一个 mySQL 表的值连接到另一个表的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31411689/

相关文章:

mysql - 使用VBA,查找安装在Windows中的MySQL ODBC驱动的版本

php - 尝试在 PHP 中连接到 MySQL 数据库时出错

php - 水蛭怎么能做到这一点?

php - session 在中间件 Laravel 5 中不起作用

php - 如何在cakephp2中运行普通的sql查询并获取结果

php - 管理注册网站 Cron 作业的最佳方式

如果只有今天可用,MySQL BETWEEN 子句不会返回任何内容。为什么?

mysql - 使用 SQL select 时如何处理列中的空格

php - 如何将数据库实例分配给 Android 用户

php - 如何在 PHP 中混合/合并 2 个 mp3 文件?