SQL查询语法错误?

时间:2013-12-05 12:57:06

标签: php mysql sql

我正在尝试修改一个在修改之前导致2条记录的查询,因为某些原因我的修改使它不起作用,因为它什么都不返回。

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

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

...我添加了这个:加入table2使用(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字段。

4 个答案:

答案 0 :(得分:2)

id中的

ORDER BY现在含糊不清。可能会有更多错误。查看mysql_error()

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

试试这个

$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")

答案 3 :(得分:0)

当连接两个在列名上没有前缀的表时,如table1_id,table2_id,你应该使用像 -

这样的别名
    SELECT * FROM table1 as t1 JOIN table2 as t2 on ... 

然后你可以像这样引用表中的字段 - t1.id,t2.id(你也可以这样做而没有别名(如t1)然后你应该引用像 - table1.id这样的字段) 。 您的脚本的问题是2个表具有列ID并且在:

    ORDER BY id DESC

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

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