MySQL高级查询多个AND和OR

时间:2011-11-03 02:55:10

标签: php mysql sql

我在整天编程后深夜画了一个空白,也许其他人可以帮助阐明我的问题所在。我正在尝试在PHP中进行MySQL查询,它使用AND和OR基于多个变量获取正确的字段。

以下是我正在尝试做的不起作用:

$result = mysql_query("SELECT * FROM tableName 
      WHERE key = '$key' ((userFrom = '$userFrom' AND userTo = '$userTo') 
                       OR (userFrom = '$userTo' AND userTo = '$userFrom')");

基本上在英语中它的作用是它需要知道Key值。一旦它与键值匹配,那么我需要具有该键值的所有行也是 - 或者是相同的用户 - 将其视为两个人之间的对话,它必须有他们的对话主题(键)和两个参与者(来自和)。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

对我来说,看起来像三个开放的parens和两个关闭的parens。遗失的一个是在收盘双引号之前。 (另外,当然,其他人提到的缺失和。)

当然,用户名中嵌入的各种字符(如果允许)将使命令以特定于数据的方式失败。出于这个原因,为了避免SQL注入攻击,切换到参数化查询。

答案 1 :(得分:0)

我认为这只是一个让括号成为正确方法的问题。试试这个:

$result = mysql_query("SELECT * FROM tableName 
                       WHERE key = '$key' **AND** 
                       ((userFrom = '$userFrom' AND userTo = '$userTo') OR 
                        (userFrom = '$userTo' AND userTo = '$userFrom')");

或者也许:

$result = mysql_query("SELECT * FROM tableName 
                        WHERE ((key = '$key') AND 
                        ((userFrom = '$userFrom' AND userTo = '$userTo') OR 
                         (userFrom = '$userTo' AND userTo = '$userFrom'))");

我认为如果你摆弄那些你会得到你想要的东西。