2015-09-30 102 views
0

我已經閱讀了很多關於這個問題的答案,但是在場景中沒有任何答案,當你需要在文章的數據庫中選擇一個隨機行時,比如說一個wordpress db,在wp_posts中,你實際上同時擁有修訂版,已刪除和已發佈的文章。從mysql中的表中隨機選擇一個'已發佈'行

以前的答案似乎返回空的結果,如果該ID是隨機的,職位是不是在這個代碼

SELECT * FROM wp_posts AS w 
    JOIN (SELECT (RAND() * (SELECT MAX(id) FROM wp_posts)) AS id) AS r2 
    WHERE w.id >= r2.id 
    AND w.post_status = 'publish' 
    ORDER BY w.id ASC 
    LIMIT 1 

回答

2

發表像是剛剛使用

SELECT * 
FROM wp_posts 
WHERE post_status = 'publish' 
ORDER BY RAND() 
LIMIT 1 

得到一個隨機記錄被公佈。

0

您的方法旨在比排序所有已發佈的文章更高效。以下內容與已發表文章相似:

SELECT * 
FROM wp_postsw CROSS JOIN 
    (SELECT (RAND() * (SELECT MAX(id) FROM wp_posts WHERE post_status = 'publish')) AS id 
    ) r2 
WHERE w.id >= r2.id AND w.post_status = 'publish' 
ORDER BY w.id ASC 
LIMIT 1; 

對於性能,您需要一個索引wp_posts(post_status, id)

也就是說,您需要子查詢中的條件。而且,您需要在WHERE條款中包含適當的列。

相關問題