在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;
我现在遇到的问题是,我不知道如何从动物表中列出所有动物,我只是让我的列表中的动物不在订单表中:
$sql = 'SELECT * FROM animals a WHERE EXISTS (SELECT * FROM orders o WHERE o.animal_ID = a.animal_ID)';
我的结果是:
<table >
<tr>
<td>alan</td>
</tr>
<tr>
<td>marion</td>
</tr>
<tr>
<td>george</td>
</tr>
</table>
&#13;
答案 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";
现在您需要检查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';