Php SQL查询语法错误?

Php SQL查询语法错误?,php,mysql,sql,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"); …我添加了以下内容:使用(id)连接表2 …所以最后的代码是:

我正试图修改一个查询,该查询在修改之前会产生2条记录,由于某种原因,我的修改使其无法工作,因为它不会返回任何内容

此查询工作并返回2条记录:

$query = mysql_query("SELECT * FROM `table1`
  WHERE `date` = '{$eventdate->format('Y-m-d')}'
    OR `date` >= CURDATE() ORDER BY id DESC");
…我添加了以下内容:使用(id)连接
表2
…所以最后的代码是:

$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字段。

id
在您的
ORDER BY
中现在是不明确的。不过可能会有更多的错误。检查您的
订单中的
mysql\u error()

id
现在不明确。不过可能会有更多的错误。检查mysql\u error()

确保表2包含匹配的数据,其中id等于表1中的id


如果不需要此匹配,则可以使用左联接。

确保表2中包含匹配的数据,其中id等于表1中的id

如果不需要此匹配,则可以使用左连接。

尝试此方法

$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")
试试这个

$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\u id、table2\u id)时,应使用别名,如-

    SELECT * FROM table1 as t1 JOIN table2 as t2 on ... 
然后您可以引用表中的字段,如-t1.id、t2.id(您也可以不使用别名(如t1),然后您应该引用字段,如-table1.id)。 脚本的问题在于,这两个表具有列id和:

    ORDER BY id DESC
引擎不知道您从哪个表中引用此id

我的另一个建议是,在查询中尽可能不使用聚合函数(在您的查询中,CURDATE就是这种类型的函数)。SQL中的聚合函数可防止查询缓存。在我们的例子中,您可以将currdate从php传递到查询,并且可以缓存查询。
希望我能帮上忙。

当连接两个列名上没有前缀的表时,如-table1\u id,table2\u id,您应该使用别名,如-

    SELECT * FROM table1 as t1 JOIN table2 as t2 on ... 
然后您可以引用表中的字段,如-t1.id、t2.id(您也可以不使用别名(如t1),然后您应该引用字段,如-table1.id)。 脚本的问题在于,这两个表具有列id和:

    ORDER BY id DESC
引擎不知道您从哪个表中引用此id

我的另一个建议是,在查询中尽可能不使用聚合函数(在您的查询中,CURDATE就是这种类型的函数)。SQL中的聚合函数可防止查询缓存。在我们的例子中,您可以将currdate从php传递到查询,并且可以缓存查询。
希望我能帮上忙。

添加mysql\u error(),
mysql\u query($query)或die(mysql\u error())
并避免使用mysql\u*函数,如果可能的话,在字符串中更改pdo或mysqliCalling方法不起作用。添加mysql\u error(),
mysql\u query($query)或die(mysql\u error())
并避免使用mysql\u*函数,如果可能的话,在字符串中对pdo或MySQLICALING方法的更改不起作用。我会建议使用LEFT JOIN我会建议使用LEFT JOIN