私のウェブサイトには一種の Facebook 風の好き嫌いシステムがあり、特定の投稿の好き嫌いを取得するために次のクエリを使用しています。
SELECT DISTINCT * FROM posts WHERE cid='$cid' AND pid=".implode(" OR pid=",$pids)." ORDER BY time DESC
$pid
検索する投稿 ID の配列です。
zbid
現在ページにアクセスしているユーザーの ID です。ここで、そのユーザーが投稿を評価 (高評価/低評価) した場合、その結果が最初に返され、その後、結果が で並べ替えられtime DESC
ます。
これを行うには、クエリをどのように変更しますか?
posts
テーブルに次のデータがある場合:
+----+-----+------+-----+--------+------+ | | ID | シド | zbid | ピッド | 評価 | 時間 | +----+-----+------+-----+--------+------+ | | 1 | 1 | 1 | 1 | 1 | 1 | +----+-----+------+-----+--------+------+ | | 2 | 1 | 2 | 1 | -1 | 4 | +----+-----+------+-----+--------+------+ | | 3 | 1 | 3 | 2 | 1 | 2 | +----+-----+------+-----+--------+------+ | | 4 | 2 | 4 | 1 | -1 | 3 | +----+-----+------+-----+--------+------+ | | 5 | 1 | 5 | 1 | 1 | 8 | +----+-----+------+-----+--------+------+ | | 6 | 1 | 6 | 1 | -1 | 7 | +----+-----+------+-----+--------+------+
現在の select ステートメント (上記) は、次の情報を返します (とともに$pid = array(1);
):
+----+-----+------+-----+--------+------+ | | ID | シド | zbid | ピッド | 評価 | 時間 | +----+-----+------+-----+--------+------+ | | 5 | 1 | 5 | 1 | 1 | 8 | +----+-----+------+-----+--------+------+ | | 6 | 1 | 6 | 1 | -1 | 7 | +----+-----+------+-----+--------+------+ | | 2 | 1 | 2 | 1 | -1 | 4 | +----+-----+------+-----+--------+------+ | | 4 | 2 | 4 | 1 | -1 | 3 | +----+-----+------+-----+--------+------+ | | 1 | 1 | 1 | 1 | 1 | 1 | +----+-----+------+-----+--------+------+
ただし、 を持つ人zbid=4
がページにアクセスしている場合は、その結果 (存在する場合) を以下のように一番上に上げる必要があります。
+----+-----+------+-----+--------+------+ | | ID | シド | zbid | ピッド | 評価 | 時間 | +----+-----+------+-----+--------+------+ | | 4 | 2 | 4 | 1 | -1 | 3 | +----+-----+------+-----+--------+------+ | | 5 | 1 | 5 | 1 | 1 | 8 | +----+-----+------+-----+--------+------+ | | 6 | 1 | 6 | 1 | -1 | 7 | +----+-----+------+-----+--------+------+ | | 2 | 1 | 2 | 1 | -1 | 4 | +----+-----+------+-----+--------+------+ | | 1 | 1 | 1 | 1 | 1 | 1 | +----+-----+------+-----+--------+------+
変数は、ページにアクセスして$zbid
いるユーザーに設定されます。zbid