选择一行特定的数据和另外一行随机的数据的MySQL查询

6
我想要显示两条记录。
例如:select * FROM users WHERE user_id = 5
现在我想要从用户表中随机选择另一行,但是user_id不等于5。
是否可以在一个查询中完成。我尝试使用union all,但我没有得到两个不同的行。
谢谢
4个回答

7

这对我来说很有效。第一个结果总是带有ID 5的记录,第二行是随机的。请注意,如果不存在ID为5的记录,则两行都将是随机的。

SELECT * FROM users ORDER BY (user_id = 5) DESC, RAND() LIMIT 0,2 

谢谢Pekka。我尝试了你的查询,效果很棒。+1。如果我有一个条件,我可以在那里使用它吗?比如说:SELECT * FROM users ORDER BY (now() BETWEEN start_date and end_date) DESC, RAND() LIMIT 0,2? - codingbbq
@noobcode 当然可以,这取决于你想做什么。这种方式不会受到条件的随机行的影响。 - Pekka
仅仅输入条件并没有起作用,所以我加入了一个子查询。这是查询的样子:""SELECT * FROM users ORDER BY (user_id = (select user_id FROM users WHERE the_condition)) DESC, RAND() LIMIT 0,2 ""。现在它完美地工作了。非常感谢你的帮助,非常感激。 - codingbbq

0

试试这个

SELECT * FROM users WHERE user_id = 5 || user_id != 5 ORDER BY RAND() LIMIT 2

不会起作用:不一定会将用户ID 5作为第一个结果返回。 - Pekka

0

使用Union应该可以解决问题。你可能忘记了LIMIT

(SELECT * FROM users WHERE user_id = 5 LIMIT 1)
UNION
(SELECT * FROM users WHERE user_id != 5 LIMIT 1)

0

试试这个:

SELECT * FROM users WHERE user_id=5
union all (
  SELECT * FROM  users WHERE user_id!=5
  ORDER BY RAND() LIMIT 0,1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接