在我的情况下,我需要在第一个显示特定项目,而不是我需要随机选择。所以我使用了以下查询
"SELECT * FROM table_test1 WHERE id = 3 UNION( SELECT * FROM table_test1 WHERE id <> 3 ORDER BY RAND() ) "
但它没有随机选择
我的桌子
id name
1 A
2 B
3 C
4 D
5 E
这总是选择C-A-B-D-E
任何人都可以解释结合理论吗?
这里错了
答案 0 :(得分:1)
使用
SELECT *
FROM table_test1
ORDER BY CASE
WHEN id = 3 THEN -1
ELSE RAND()
END
正如Quassnoi在评论中指出的那样,第二个语句中的ORDER BY
被完全忽略。
从语义上讲,如果您希望按特定顺序对整个结果进行排序,那么您需要一个适用于整个查询的order by
,否则您的解决方案最终可能会依赖于有关未来版本中实现的实现的假设。 / p>
答案 1 :(得分:0)
UNION删除重复项。为此,它会对结果集进行排序,从而获得顺序。你可以使用UNION ALL解决这个问题,它不会删除重复项,因此不需要排序。
此外,http://jan.kneschke.de/projects/mysql/order-by-rand/不要使用ORDER BY RAND()。它不会扩展。