Php 忽略MySQL连接查询中的空结果
我有一个MySQL连接查询,它运行得很好(免责声明:摘自教程):Php 忽略MySQL连接查询中的空结果,php,mysql,join,Php,Mysql,Join,我有一个MySQL连接查询,它运行得很好(免责声明:摘自教程): <?php $connection = mysql_connect("localhost", "root", "test") or die("Error connecting to database"); mysql_select_db("products90", $connection); $result = mysql_query("SELECT * FROM buyers LEFT JOIN p
<?php
$connection = mysql_connect("localhost", "root", "test") or die("Error connecting to database");
mysql_select_db("products90", $connection);
$result = mysql_query("SELECT * FROM buyers LEFT JOIN products USING (id);", $connection) or die("error querying database");
$i = 0;
while($result_ar = mysql_fetch_assoc($result)){
?>
<table>
<tr <?php if($i%2 == 1){ echo "class='body2'"; }else{echo "class='body1'";}?>>
<td>
<?php echo $result_ar['buyer_name']; ?></td>
<td>
<?php echo $result_ar['manufacturer']; ?>
</td>
<td>
<?php echo $result_ar['product_name']; ?>
</td>
</tr>
</table>
<?php
$i+=1;
}
?>
然而,如果我想让它忽略空结果,我需要对连接做什么,哪种类型是合适的
我看了一下谷歌,但不知道该从哪里着手
SELECT * FROM buyers LEFT JOIN products USING (id) WHERE products.id IS NOT NULL
或
使用
JOIN
只会带来匹配的行,而左JOIN
会带来所有买家,不管在产品中找到任何匹配项,并在之后过滤记录。我不完全确定您的场景,但对我来说,使用JOIN
而不是LEFT JOIN
来表示您希望忽略空结果似乎更简单,您的确切意思是什么?你是说当你的左连接执行时,你得到了一些买家,他们旁边的产品将是空的(如果他们买了一些)
在这种情况下,您要查找的是一个内部联接,它只在另一个联接中有匹配项时才显示值。如果您想忽略空结果,那么只需使用
内部联接即可,您不需要左联接
将查询更改为:
SELECT * FROM buyers JOIN products USING (id)
你可以使用一个内部连接(如果我答对了你的问题)
有关MySQL中连接类型的概述,请参阅当您说您有空结果时,您的意思是没有产品的地方
无论如何,如果您有空ID,因此,在产品中没有结果,您也可以添加
where products.id is not null
或者,您可以将连接从left join更改为just join,使其成为内部连接谢谢,但是如果我有两个值—product.id和product_name列—我只会收到“error querying database”(错误查询数据库)消息,那该怎么办呢?因为查询优化器无法优化它们,所以您应该只在必要时执行left join(顺序对于左连接很重要)。所以您应该选择第二个query@avenas8808使用或死(mysql\u error())
相反,它将输出准确的错误。@avenas8808我认为您应该向我们展示这两个表的DB架构。在我看来,您的上述评论中的products表中似乎没有外键。如果某个产品停产,我将列设为NULL-数据库中有一个副本,这是一个测试副本。谢谢;i是什么NNER JOIN查询这一个,我可以试试吗?选择…从买家内部加入产品使用(id)
where products.id is not null