我正在使用PHP w / PDO使用MySQL而我遇到的问题是我执行一个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)");
*联系人列表: 贝拉卢戈西 木本啄木鸟 Bucky Winters 贝拉卢戈西 木本啄木鸟
Bella Lugosi和木质啄木鸟是该列表顶部前两个名称的副本。第一个查询返回前两个名称(我对该查询执行了rowCount()并显示了2,我在第二个查询中执行了rowCount()并显示了3,因此最后三个名称从第二个查询中撤回查询)那么有人知道为什么会这样吗? (第二个查询拉回了在PHPMyAdmin中相同查询正常工作时不应检索的行)
答案 0 :(得分:0)
猜测,我会说两个查询中的参数不一样。没有理由相同的查询返回不同的行数。
我建议不要使用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