2012-04-24 71 views
2

我有我的表postsuser_unread_posts。 在posts中,保存論壇的所有帖子,並在user_unread_posts保存的所有帖子都被用戶讀取。MySQL - 非常複雜的隨機行

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)

但它不工作,像它應該工作,這回的帖子也被讀...如何我解決這個問題?

+0

來自帖子INNER JOIN user_unread_posts? – 2012-04-24 17:10:16

+0

我是否正確:您正在將已讀帖子存儲在名爲「未讀帖子」的表中? – Quassnoi 2012-04-24 17:22:29

+0

不,是的:這是一個例子,真正的表名不是這樣的。愚蠢的我... – ninov 2012-04-24 17:33:45

回答

1
SELECT * 
FROM posts 
WHERE id NOT IN 
     (
     SELECT pid 
     FROM user_unread_posts uup 
     WHERE uid = $myuserid 
     ) 
ORDER BY 
     RAND() 
LIMIT 1 
+0

好吧,這很好。謝謝 – ninov 2012-04-24 17:37:48

0

你想使用IS NULL和LEFT JOIN。使用<>將LEFT JOIN變爲INNER JOIN,因爲NULL永遠不會匹配<>運算符。

這裏是一個糾正查詢:

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