具有种子

时间:2017-09-19 10:09:35

标签: php mysql

美好的一天。 我有2列(product_id和total),我需要按特定列随机化。

product_id   |   product_total  
    773      |   18
    840      |   22
    847      |   18
    888      |   20

我可以通过兰德(123)订购选择,但是根据我的理解,它按最后选择的列随机化,在我的情况下,它是" Total"。这里的建议是使用

ORDER BY product_id ASC, RAND(123)

似乎不适合我。 我怎么能做到这一点?

更新 我的意思是"具体"在我的情况下,由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 除了第一个(我们称之为Q1)SELECT p.product_id和第二个(Q2)SELECT p.product_id, count(*) AS product_total之外,两个查询是相同的 如果我在没有ORDER BY RAND(123)的情况下进行查询,我将获得Q1:

product_id  
773
840
847
888
893
905
939
942

和Q2:

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)。所以问题是为什么?)

1 个答案:

答案 0 :(得分:0)

我试图进行最简单的查询

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 ver 5.7。 我不知道它是否是一个bug或者我可能在使用RAND()(使用种子)func时遗漏了一些东西,但是解决方案是使用所有查询作为子查询而不使用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

最后别名是必须的。