为什么“mySQL LEFT JOIN”查询有效?

时间:2012-10-05 05:18:27

标签: mysql sql select left-join

当应该有一些结果时返回0行。

这是我第一次尝试使用JOIN,但从我看过的内容看起来非常正确,对吧?

"SELECT pending.paymentid, pending.date, pending.ip, pending.payer, pending.type, pending.amount, pending.method, pending.institution, payment.number, _uploads_log.log_filename 
FROM pending 
LEFT JOIN _uploads_log 
ON pending.paymentid='".$_GET['vnum']."' 
AND _uploads_log.linkid = pending.paymentid"

我需要从pending.paymentid_uploads_log.log_filename等于$_GET['vnum]的每个表中返回指定的值

这样做的正确方法是什么?为什么我没有得到任何结果?

如果比我更有经验的人能指出我正确的方向,我会非常感激。

修改

对于pending,主要密钥为paymentid,对于_uploads_log,主要密钥为log_idlog_filename列为索引。

2 个答案:

答案 0 :(得分:5)

试试这个

 SELECT  pending.paymentid, 
         pending.date, 
         pending.ip, 
         pending.payer, 
         pending.type, 
         pending.amount, 
         pending.method, 
         pending.institution, 
         payment.number, 
         _uploads_log.log_filename 
FROM     pending 
         LEFT JOIN _uploads_log 
              ON _uploads_log.linkid = pending.paymentid
WHERE   _uploads_log.log_filename = '" . $_GET['vnum']  . "' 

您的当前查询易受SQL注入攻击。请花些时间阅读以下文章。

Best way to prevent SQL injection in PHP?

答案 1 :(得分:0)

ON子句只应具有链接两个表的条​​件,尤其是LEFT JOIN。然后WHERE子句具有实际条件。否则,如果_uploads_log中没有相应的条目,您将得不到任何结果。在我看来,它也更容易阅读。

另一个评论。使用绑定参数以避免SQL注入总是更好。