重写复杂SQL语句的最佳方法


Best method to rewrite complex SQL statement?

我有以下SQL语句:

mysql_query("SELECT * FROM `friends` WHERE friend1='$username' OR friend2='$username' AND confirmed='1'");

我想要完成的是从表中删除从表friends中选择的数据,其中两个字段之一等于您的用户名,并且confirmed字段必须等于1。但这似乎并没有起作用。重写它的最好方法是什么?

试试用括号中的好友子句:

 SELECT * FROM friends 
 WHERE (friend1='$username' OR friend2='$username')
 AND confirmed='1'

这将确保满足您的好友条件之一。无论哪个匹配,它都会检查确认位。如果两个友元条件都不匹配,则该行不是结果集的一部分。

也许你的where子句没有以你期望的方式评估条件?试一试:

mysql_query("SELECT * FROM `friends` WHERE (friend1='$username' OR friend2='$username') AND confirmed='1'");

下面的链接显示了mysql中的运算符优先级,正如你可以看到AND在OR之前求值,因此你的问题。

http://dev.mysql.com/doc/refman/4.1/en/operator-precedence.html