2015-11-23 48 views
1


我使用這兩個MySQL的語句讓兩個用戶之間所有消息,但我遇到了一個相當大的問題,當談到稍後在代碼中操縱數據,因爲它不是爲了通過ID。有什麼方法可以合併這些語句並按ID排序結果?是否可以將這兩個SQL語句合併爲一個?由於

$sql = "SELECT * FROM messages WHERE sender='" . $username . "' AND receiver='" . $chatPartner . "'" 

$sqlTwo = "SELECT * FROM messages WHERE sender='" . $chatPartner . "' AND receiver='" . $username . "'" 

本質上,我需要在兩個人之間發生的每一個消息,但是按ID排序。截至目前,我正在加入陣列以獲取我的完整列表,但它不是按ID排序的。
感謝
尼克

+0

是的,你可以使用'或'用括號... – sgeddes

+1

有時OR值可能會很慢,如果你發現是這樣的話,嘗試聯合所有。 – Rabbit

+0

不僅如此,但它也很容易出現SQL注入!不要字符串連接sql查詢!還有像http://php.net/manual/de/mysqli.prepare.php – amenthes

回答

4
SELECT * FROM messages 
WHERE (sender='" . $username . "' AND receiver='" . $chatPartner . "'") 
OR (sender='" . $chatPartner . "' AND receiver='" . $username . "'") 
ORDER BY id DESC 
0

如何只結合了到1個查詢?

$sql = "SELECT * FROM messages WHERE (sender=" . $username . " OR sender =". $chatPartner .") AND (receiver=" . $chatPartner . " OR receiver=" . $username .") ORDER BY id" 
+0

更好的方法,它沒有工作。我返回的錯誤:mysql_error()期望參數1是資源,布爾給定 –

0

您還可以使用row constructors來編寫@ dtj答案的較短版本。

SELECT * 
FROM messages 
WHERE (sender, receiver) IN (($username, $chatPartner),($chatPartner, $username)) 
ORDER BY id DESC 

在我看來,它在代碼中看起來更漂亮一些,並且使其更具可讀性,但請記住它不會提高執行性能。

相關問題