好的, 我有2個表格。在所謂的項目,所有的數據都存儲(ID,名稱,描述等。)和第二臺名爲功能其中精選內容的列表存儲(ID,商品ID)如何從一個表中選擇5個隨機行並從第二個行中列出行?
我會喜歡做的是從精選表中選擇5個隨機行,並在items表中匹配itemid。 的項目表是有點大,30行左右,而目前該功能具有106
次要的問題:它會更好,如果我只需添加到項目表中,設置一個布爾值,如果它的功能還是不?
好的, 我有2個表格。在所謂的項目,所有的數據都存儲(ID,名稱,描述等。)和第二臺名爲功能其中精選內容的列表存儲(ID,商品ID)如何從一個表中選擇5個隨機行並從第二個行中列出行?
我會喜歡做的是從精選表中選擇5個隨機行,並在items表中匹配itemid。 的項目表是有點大,30行左右,而目前該功能具有106
次要的問題:它會更好,如果我只需添加到項目表中,設置一個布爾值,如果它的功能還是不?
SELECT *
FROM featured f
JOIN items i
ON i.id = f.itemid
ORDER BY
RAND()
LIMIT 5
雖然此查詢可能需要很長時間處理大型數據集。
我個人認爲使用另一個列而不是另一個表會更好,因爲兩個表都有相同的超級鍵。這聽起來像一個JOIN會爲你工作得很好。
SELECT * FROM featured f JOIN items ON (f.id = itemid) ORDER BY RAND() LIMIT 5;
謝謝。我會接受你的建議並添加一個新專欄。但將保持這個以供將來參考(該死的這個網站的岩石!) – user1343099 2013-04-24 21:25:59
我認爲最有效的方法是:
select *
from (select f.*
from featured f
order by rand()
limit 5
) f join
items i
on i.id = f.itemId;
在你的情況下,在106與5行的排序是在性能方面可能是無關緊要的。但是,如果特色列表增長,那麼它可能會有所作爲。
好吧,謝謝。對我來說,真的很酷,你們想出了所有這些「訣竅」以獲得最快的結果。這個網站教了我很多。 – user1343099 2013-04-24 22:17:35
感謝您的快速響應。在這個例子中使用rand()會好嗎? – user1343099 2013-04-24 21:19:54
有106條記錄,是 – Quassnoi 2013-04-24 21:20:22
感謝您的幫助 – user1343099 2013-04-24 21:25:41