繁体   English   中英

SQL查询语法错误?

[英]SQL Query Syntax error?

我试图修改一个查询,该查询导致在修改之前产生2条记录,由于某种原因,我的修改使其不起作用,因为它不返回任何内容。

该查询有效并返回2条记录:

$query = mysql_query("SELECT * FROM `table1`
  WHERE `date` = '{$eventdate->format('Y-m-d')}'
    OR `date` >= CURDATE() ORDER BY id DESC");

...我添加了这个:JOIN table2 USING(id)...所以这最后的代码是这样的:

$query = mysql_query("SELECT * FROM `table1` JOIN `table2` USING(id)
  WHERE `date` = '{$eventdate->format('Y-m-d')}'
    OR `date` >= CURDATE() ORDER BY id DESC");

问题是第二个什么都不返回。

这是语法错误吗? 我该如何工作? 两个表都有id字段。

您的ORDER BY id现在不明确。 不过可能会有更多错误。 mysql_error()检查

确保table2包含匹配的数据,其中id等于table1中的id。

如果不需要此匹配项,则可以使用LEFT JOIN。

尝试这个

$query = mysql_query("SELECT * FROM `table1` a,`table2` b  WHERE a.id=b.id
 and (`a.date` = '{$eventdate->format('Y-m-d')}' OR `a.date` >= CURDATE())
 ORDER BY id DESC")

连接两个在列名上没有前缀的表(如-table1_id,table2_id)时,应使用别名-

    SELECT * FROM table1 as t1 JOIN table2 as t2 on ... 

然后您可以像这样在表中引用字段-t1.id,t2.id(也可以不使用别名(如t1)来执行此操作,然后您应该引用-table1.id这样的字段)。 您的脚本的问题在于2个表的列ID为in:

    ORDER BY id DESC

引擎不知道您从哪个表引用此ID

我的其他建议是,在可能的情况下不要在查询中使用聚合函数(在查询中,CURDATE是该类型的函数)。 SQL中的聚合功能可防止查询缓存。 在我们的情况下,您可以将currdate从php传递到查询,并且可以缓存查询。 希望我有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM