-1

我正在使用带有 MySQL 的带 PDO 的 PHP,我遇到的问题是我执行 SQL 语句并用 HTML 写出结果。然后另一个 SQL 语句执行,问题是正在返回不应该返回的行。我知道这是真的,因为当我在 PHPMyAdmin 中执行第二个查询时,我得到了我期望的结果。环境如下(PHP 5.2.17、MySQL 5.30、Apache 2.2.25)。只是为了将活动扳手投入到它应该在我的电脑上工作的情况中。如果有帮助,这里是 SQL stmt:

$unusedContactsQuery = $dbc->prepare("select idContact, contactName 
from contactinfo
where iduser = :iduser
and contactAuthorized = 1
and idcontact not in (select a.idcontact from  contactinfo a                    
        inner join eventcontacts c on a.idContact = c.idContact
            inner join eventschedule b on c.idEventContact = b.idEventContact
                where b.idEventContact = :idEventContact
                and a.iduser = :iduser
                and contactAuthorized = 1)");

*联系人列表:Bella Lugosi 木本啄木鸟 Bucky Winters Bella Lugosi 木本啄木鸟

Bella Lugosi 和 woody woodpecker 是该列表顶部的前两个名字的重复。第一个查询返回前两个名称(我对该查询执行了 rowCount() 并显示 2,我在第二个查询中执行了 rowCount() 并显示了 3,因此后三个名称从第二个中拉回查询)那么有人知道为什么会这样吗?(当同一查询在 PHPMyAdmin 中正常工作时,第二个查询拉回不应检索的行)

4

1 回答 1

0

猜测一下,我会说两个查询中的参数不一样。同一个查询没有理由返回不同数量的行。

与其做 a NOT IN,我建议直接加入contactinfo左连接并寻找空行 - 它很可能也会更快。

如果没有要测试的数据,很难重新编写查询,但请尝试

SELECT idContact, contactName 
FROM contactinfo ci
LEFT JOIN eventcontacts ec USING(idContact)
LEFT JOIN eventschedule es USING(idEventContact)

WHERE ci.iduser = :iduser 
AND ec.idEventContact = :idEventContact 
AND ci.contactAuthorized = 1 
AND es.idEventContact IS NULL
于 2013-09-01T02:43:24.530 回答