如何标记一个表中不在另一个表(mySQL)中的值?

时间:2016-09-29 08:40:13

标签: php html mysql

在mySQL中,这是我的表animals

+-----------+--------+--------+
| animal_ID |  name  | animal |
+-----------+--------+--------+
|         1 | alan   | dog    |
|         2 | sam    | frog   |
|         3 | marion | cat    |
|         4 | george | rabbit |
|         5 | bob    | bird   |
+-----------+--------+--------+

这是我的表orders

+----------+-----------+
|   date   | animal_ID |
+----------+-----------+
| 02.03.16 |         4 |
| 12.04.16 |         3 |
| 18.07.16 |         1 |
+----------+-----------+

我想列出所有动物,但标记不在订单表中的动物为红色。这是我的预期结果



<table >
  <tr>
    <td>alan</td>
  </tr>
  <tr>
    <td style="color:red">sam</td>
  </tr>
    <tr>
    <td>marion</td>
  </tr>
    <tr>
    <td>george</td>
  </tr>
    <tr>
    <td style="color:red">bob</td>
  </tr>
</table>
&#13;
&#13;
&#13;

我现在遇到的问题是,我不知道如何从动物表中列出所有动物,我只是让我的列表中的动物不在订单表中:

$sql = 'SELECT  *  FROM animals a WHERE EXISTS (SELECT * FROM orders o WHERE  o.animal_ID = a.animal_ID)';

我的结果是:

&#13;
&#13;
 <table >
      <tr>
        <td>alan</td>
      </tr>
        <tr>
        <td>marion</td>
      </tr>
        <tr>
        <td>george</td>
      </tr>
    </table>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

您需要使用两个查询来创建此脚本。

 1. Query for all the animals.
 2. Query with the animals ID in the orders.

第一个是:

$sql = 'SELECT  *  FROM animals";

循环并检查第一个循环内的order表 -

$sql2 = "SELECT * FROM orders WHERE  animal_ID = fetched_animal_ID";
if(mysqli_num_rows($sql2) > 0){
    // print the normalrows here
}else{
    // print the red rows here
}

=============================================== ===============

您也可以使用LEFT JOIN执行此操作 -

$sql = "SELECT *, o.animal_ID as o_animal FROM animals a LEFT JOIN orders o 
        ON a.animal_ID = o.animal_ID";

Online Example

现在您需要检查o_animal是否为空或空,然后使用red行,否则正常。

如果您有任何疑问,请问我。

答案 1 :(得分:1)

您可以在不使用连接查询的情况下尝试其他方法。

<?php
include 'conn.php';
$sq=mysqli_query($conn,'select * from orders');
$i=0;
$ar=array();
while($re=mysqli_fetch_array($sq))
{
$anid=$re['animal_ID'];
$ar[$i]=$anid;
$i++;
}
$sql=mysqli_query($conn,"select * from animals");
?>
<table >
    <?php

while($all=mysqli_fetch_array($sql))
{
    if(in_array($all['animal_ID'],$ar))
    {
       ?>

    <tr>

        <td><?php echo $all['name'];?></td>
    </tr
    <?php
    }

else
{
  ?>  <tr>

        <td style="color:red"><?php echo $all['name'];?></td>
    </tr>
<?php
}
}
?>
</table>

答案 2 :(得分:0)

简单的否定?

$sql = 'SELECT  *  FROM animals a WHERE NOT EXISTS (SELECT * FROM orders o WHERE  o.animal_ID = a.animal_ID)';

或者可以使用子查询获取计数,突出显示零...

$sql = 'SELECT  a.*,
        (SELECT COUNT(*) FROM orders WHERE animal_ID = a.animal_ID)
        FROM animals a';