2013-06-26 2 views
0

Я пытался обращаться к базе данных с этой строкой коды:запросы к базе данных с двойным или проверить и проверить

$query_check = mysql_query("SELECT * 
          FROM chat 
          WHERE sent_by_id || sent_to_id = '$user' 
           AND sent_by_id || sent_to_id = '$friend_id'"); 

В основном то, что я пытаюсь сделать, это проверить, если один из двух таблиц создает первую переменную AND, если одна из двух таблиц представляет вторую переменную. Теперь я знаю, что есть оператор ИЛИ, но в этом случае он не будет работать, как вы можете себе представить.

Так окончание результат должен быть что-то вроде этого:

1,2 
2,1 
1,1 
2,2 

, но я получаю результаты, как это:

1,1 
1,2 
2,2 
1,1 
2,1 
4,1 
3,1 

и так далее.

+0

@ NL-х на самом деле это логическое или: http://dev.mysql.com/doc/refman/5.0/en/logical-operators.html#operator_or – PerfectPixel

+0

@PerfectPixel, смешно. Я никогда не вижу, чтобы кто-то использовался ... знаете ли вы, знаете ли, что '||' имеет тот же самый приоритет, что и «или», как в PHP? –

+0

@ nl-x по документации они кажутся эквивалентными –

ответ

2

Это будет делать:

WHERE (sent_by_id = '$user' AND sent_to_id = '$friend_id') 
    OR (sent_by_id = '$friend_id' AND sent_to_id = '$user') 

Скобки есть для ясности. На самом деле это не так.

+0

Спасибо, что, похоже, выполняет эту работу. : D – WarSensation

+1

'WHERE (sent_by_id, sent_to_id) IN ((...), (...))' будет работать в MySQL, нет? –

+1

@AndriyM Да, но это дает неэффективные планы (не уверен, что он был исправлен в 5.6). Так что лучше безопасно, чем жаль. –

0

Попробуйте с кронштейнами и использовать или оператора

$query_check = mysql_query("SELECT * FROM chat WHERE (sent_by_id = '$user' OR sent_to_id = '$user') AND (sent_by_id = '$friend_id' OR sent_to_id = '$friend_id')"); 
+0

Kinda надеялся, что это сработает, я имею в виду, что это кажется логичным, но я все равно получаю тот же результат. – WarSensation

+0

Это тоже кажется правильным. И эквивалентно моему ответу (если у вас нет сообщений от пользователя к себе.) –

0
$query_check = mysql_query(" 
    SELECT 
     * -- In stead of *, you can just use: sent_by_id, sent_to_id 
    FROM 
     chat 
    WHERE 
     (sent_by_id = '$user' OR sent_to_id = '$user') 
     AND (sent_by_id = '$friend_id' OR sent_to_id = '$friend_id') 
");