簡體   English   中英

mysql按特定列以種子隨機順序排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM