2

私は自分のテーブルpostsとを持っていuser_unread_postsます。ではposts、フォーラムのuser_unread_postsすべての投稿が保存され、ユーザーが読んだすべての投稿が保存されます。

user_undread_postsこのように見えます:

id   uid   pid

ここで、ユーザーがまだ読んでいないランダムな投稿を開くことができるようにしたいと思います。私は次のようなものを試しました

SELECT * FROM posts
LEFT JOIN user_unread_posts uup
ON uup.pid=posts.id
WHERE uup.uid<>1
ORDER BY RAND()
LIMIT 1

(1はプレースホルダーUIDです)

しかし、それは機能するはずですが、それは読まれた投稿も返します...どうすればそれを修正できますか?

4

2 に答える 2

1
SELECT  *
FROM    posts
WHERE   id NOT IN
        (
        SELECT  pid
        FROM    user_unread_posts uup
        WHERE   uid = $myuserid
        )
ORDER BY
        RAND()
LIMIT 1
于 2012-04-24T17:23:03.643 に答える
0

LEFT JOIN で IS NULL を使用したかった。<> を使用すると、NULL は <> 演算子と一致しないため、LEFT JOIN が INNER JOIN に変わります。

修正されたクエリは次のとおりです。

SELECT * FROM posts
LEFT JOIN user_unread_posts uup
ON uup.pid=posts.id
WHERE uup.uid IS NULL
ORDER BY RAND()
LIMIT 1
于 2012-08-04T08:23:17.980 に答える