两个MySQL函数独立地按预期工作,但它们一起返回随机结果。考虑这两个问题:
查询1
这显然返回id=8
明显的行:
SELECT * FROM table_categories WHERE id = 8
查询2
根据我的表设置,这始终返回1到16之间的数字:
SELECT cat.id FROM table_categories cat
LEFT JOIN table_user_to_category u2c
ON u2c.cat_id = cat.id AND u2c.user_id = 0
ORDER BY IFNULL(u2c.count,0), RAND() LIMIT 1
联合
奇怪的是,这有时会从table_categories
返回一行,有时会返回2行,有时会返回3行,有时甚至没有。到底是什么?
SELECT * FROM table_categories WHERE id = (
SELECT cat.id FROM table_categories cat
LEFT JOIN table_user_to_category u2c
ON u2c.cat_id = cat.id AND u2c.user_id = 0
ORDER BY IFNULL(u2c.count,0), RAND() LIMIT 1)
这是因为RAND()
吗?我想不出来!对我来说似乎很奇怪,但我是一个相对新手。
答案 0 :(得分:0)
您确定id
被定义为UNIQUE
还是PRIMARY KEY
?否则,您可以轻松地拥有多个具有相同ID的行,如果随机数选择它们,则会返回这些行。