2013-04-24 51 views
0

好的, 我有2個表格。在所謂的項目,所有的數據都存儲(ID,名稱,描述等。)和第二臺名爲功能其中精選內容的列表存儲(ID,商品ID)如何從一個表中選擇5個隨機行並從第二個行中列出行?

我會喜歡做的是從精選表中選擇5個隨機行,並在items表中匹配itemid。 的項目表是有點大,30行左右,而目前該功能具有106

次要的問題:它會更好,如果我只需添加到項目表中,設置一個布爾值,如果它的功能還是不?

回答

4
SELECT * 
FROM featured f 
JOIN items i 
ON  i.id = f.itemid 
ORDER BY 
     RAND() 
LIMIT 5 

雖然此查詢可能需要很長時間處理大型數據集。

+0

感謝您的快速響應。在這個例子中使用rand()會好嗎? – user1343099 2013-04-24 21:19:54

+0

有106條記錄,是 – Quassnoi 2013-04-24 21:20:22

+0

感謝您的幫助 – user1343099 2013-04-24 21:25:41

3

我個人認爲使用另一個列而不是另一個表會更好,因爲兩個表都有相同的超級鍵。這聽起來像一個JOIN會爲你工作得很好。

SELECT * FROM featured f JOIN items ON (f.id = itemid) ORDER BY RAND() LIMIT 5; 
+0

謝謝。我會接受你的建議並添加一個新專欄。但將保持這個以供將來參考(該死的這個網站的岩石!) – user1343099 2013-04-24 21:25:59

2

我認爲最有效的方法是:

select * 
from (select f.* 
     from featured f 
     order by rand() 
     limit 5 
    ) f join 
    items i 
    on i.id = f.itemId; 

在你的情況下,在106與5行的排序是在性能方面可能是無關緊要的。但是,如果特色列表增長,那麼它可能會有所作爲。

+0

好吧,謝謝。對我來說,真的很酷,你們想出了所有這些「訣竅」以獲得最快的結果。這個網站教了我很多。 – user1343099 2013-04-24 22:17:35

相關問題