Php 忽略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

我有一个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 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