[英]mysql order by specific column in random order with seed
美好的一天。 我有2列(product_id和total),我需要按特定列隨機化輸出。
product_id | product_total
773 | 18
840 | 22
847 | 18
888 | 20
我可以通過RAND(123)命令選擇選擇,但是據我了解,它按最后選擇的列進行隨機化,在我的情況下為“總計”。 找到的建議可以在這里使用
ORDER BY product_id ASC, RAND(123)
似乎不適合我。 我怎樣才能做到這一點?
UPDATE我的意思是product_id隨機指定“特定”,因為據我了解,隨機輸出取決於腳本隨機化的列。 這2個查詢給出2個不同的結果:
SELECT p.product_id
FROM oc_product_to_category p2c
LEFT JOIN oc_product p ON (p2c.product_id = p.product_id)
LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id)
WHERE EXISTS (SELECT *
FROM oc_product_to_category p2c
WHERE p2c.product_id = p.product_id
AND p2c.category_id IN (92))
GROUP BY p.product_id
ORDER BY RAND(123) LIMIT 0,15
和
SELECT p.product_id, count(*) AS product_total
FROM oc_product_to_category p2c
LEFT JOIN oc_product p ON (p2c.product_id = p.product_id)
LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id)
WHERE EXISTS (SELECT *
FROM oc_product_to_category p2c
WHERE p2c.product_id = p.product_id
AND p2c.category_id IN (92))
GROUP BY p.product_id
ORDER BY RAND(123) LIMIT 0,15
UPDATE2兩個查詢是相同的,除了第一個查詢( SELECT p.product_id
稱為Q1) SELECT p.product_id
和第二個查詢(Q2) SELECT p.product_id, count(*) AS product_total
如果我在沒有ORDER BY RAND(123)
情況下進行查詢獲得第一季度:
product_id
773
840
847
888
893
905
939
942
對於第二季度:
product_id | product_total
773 36
840 44
847 36
888 40
893 40
905 36
但是使用ORDER BY RAND(123)
我得到:Q1:
product_id
1258
3226
2421
2146
2336
2228
3333
和Q2:
product_id | product_total
3154 34
3557 32
1749 34
960 34
1863 24
3389 38
2220 42
結果與您看到的不一致(按product_id)。 所以問題是為什么?)
我試圖進行最簡單的查詢
SELECT product_id, count(*) AS product_total
FROM oc_product_to_category p2c WHERE p2c.category_id='92' GROUP BY product_id ORDER BY RAND(335) LIMIT 0,15
和
SELECT product_id
FROM oc_product_to_category p2c WHERE p2c.category_id='92' GROUP BY product_id ORDER BY RAND(335) LIMIT 0,15
結果是不同的。 MySQL版本5.7。 我不知道這是一個錯誤還是在使用RAND()(帶有種子)函數時丟失了某些東西,但是解決方案是將所有查詢用作沒有LIMIT的子查詢,然后對結果進行RAND,例如:
SELECT * FROM (SELECT product_id
FROM oc_product_to_category p2c WHERE p2c.category_id='92' GROUP BY product_id ORDER BY product_id) AS T ORDER BY RAND(335) LIMIT 0,15
最后的別名是必須的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.