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)。所以问题是为什么?)
答案 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
最后别名是必须的。