2013-06-26 23 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如果兩個表中的一個構成第二個變量。現在我知道有一個操作符OR,但是在這種情況下它不起作用,正如你可以想象的那樣。

所以結束結果應該是這樣的:

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

,但我得到的結果是這樣的:

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

等。

+0

@ NL-X實際上它是一個邏輯或: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

有點希望這會工作,我的意思是這似乎合乎邏輯,但我仍然得到相同的結果。 – 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') 
");