【问题标题】:Why isn't my SQL LEFT JOIN query working?为什么我的 SQL LEFT JOIN 查询不起作用?
【发布时间】:2012-09-26 05:40:41
【问题描述】:

应该有结果的时候返回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_id 的列,log_filename 被列为索引。

【问题讨论】:

  • 当您从待处理(没有加入)中选择时,您是否得到任何结果?

标签: mysql sql select left-join


【解决方案1】:

试试这个

 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?

【讨论】:

  • 你的意思是我添加的代码不起作用?实际上你的问题并不清楚。您可以添加表的架构吗?表的外键是什么?
  • 是的,您的代码也没有返回任何结果。对于pending,主键是paymentid,对于_uploads_log,主键是一个名为log_id 的列,log_filename 被列为索引。
  • 所以两张表的关系是paymentid = log_id对吧?无论如何,我刚刚更新了答案。
  • 不,paymentid = linkid。为什么,它们都必须是这个工作的关键?
  • 因为它们是定义两个表如何相互链接的键。你试过在命令行或mysql浏览器上运行它吗?有结果吗?还是$_GET['vnum'] 有价值?
【解决方案2】:

ON 子句只应具有链接两个表的条​​件,特别是如果它是LEFT JOIN。然后WHERE 子句具有实际条件。否则,如果_uploads_log 中没有相应的条目,您将一无所获。在我看来,它也更容易阅读。

作为另一句话。最好使用绑定参数来避免 SQL 注入。

【讨论】:

  • 你能举个例子吗?
猜你喜欢
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2017-08-02
  • 2018-08-21
  • 1970-01-01
相关资源
最近更新 更多