私はシンプルなメッセージングシステムを持っています。私はReceivedメッセージとSentメッセージの両方を表示したいと思います。次のように無関係な情報を省略して、関連するテーブル/カラムは、レイアウトされている:MySQLの1つのクエリで2つのカラムが同じテーブルに結合された結果セットを取得する方法はありますか?
User:
id | firstName | lastName
-------------------------
Message:
id | fromid | toid | message
----------------------------
私が実行しているクエリは次のとおりです。
SELECT message.id, `fromid`, `toid`, `sent`, `message`, message.email, `read`, user.id, `firstName`, `lastName`, `rank`
FROM message LEFT JOIN `user` ON message.fromid = user.id OR message.toid = user.id
WHERE `toid` = '$id' OR `fromid` = '$id'
ORDER BY `read` DESC, `sent` DESC";
(そして、私のPHPスクリプトでソートするために、私は: )
$received = array();
$sent = array();
while ($dbRow = mysql_fetch_array($query)) {
if ($dbRow['toid'] == $id) {
$received[] = $dbRow;
} else if ($dbRow['fromid'] == $id) {
$sent[] = $dbRow;
}
}
だから私はtoid
かfromid
どちらかがユーザーのIDと同じであるメッセージを選択何をしたいのか、それに応じて(それらを並べ替えるすなわち、ユーザーのIDがである場合toid
列、それは他のユーザーからそれらに送信されましたが、fromid
列にある場合、ユーザーは他のユーザーに送信しました)。
$sent[]
の配列に重複が含まれている点を除いて、ほとんどの種類のクエリが動作します。つまり、各行が2回リストされ、ユーザーの名前が表示され、もう一方が受信者の名前を表示します。私はなぜそんなに見ることができますが、私はそれを修正するために何をすべきか分かりません。
私は自分のSQLクエリやPHPスクリプトを調整する必要があるかどうかわかりませんので、両方を含めました。
私は2つのクエリに分けることができますが、私は自分のSQLを改善し、ジョインがどのように機能するかについてもっと学びたいと思っています。
をこれは完璧に動作します!私は2つの結合を使用するとは思わなかった。 – Corey