我正在尝试修改一个在修改之前导致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字段。
答案 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传递给查询,并且可以缓存查询。 希望我能帮助你。