【问题标题】:mysql query to select one specific row and another random rowmysql查询以选择一个特定行和另一个随机行
【发布时间】:2011-04-26 21:07:54
【问题描述】:

我想显示两条记录。

例如 select * FROM users WHERE user_id = 5

现在我想从 users 表中随机选择另一行,但 user_id != 5

是否可以在单个查询中完成。我尝试使用 union all 但我没有得到两个不同的行。

谢谢

【问题讨论】:

    标签: mysql random


    【解决方案1】:

    试试这个

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

    【讨论】:

    • 不起作用:不一定将用户 ID 5 作为第一个结果
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢佩卡。我试过你的查询。它工作得很好。 +1。如果我有条件怎么办。我可以在那里使用它吗?比如说 SELECT * FROM users ORDER BY (now() BETWEEN start_date and end_date) DESC, RAND() LIMIT 0,2 ??
    • @noobcode 当然,这取决于你想做什么。这样随机行不会被条件覆盖
    • 仅仅输入条件不起作用。所以我放了一个子查询。这就是查询的样子。"" SELECT * FROM users ORDER BY (user_id = (select user_id FROM users WHERE the_condition)) DESC, RAND() LIMIT 0,2 "" 这很完美。非常感谢。欣赏。
    【解决方案3】:

    Union 应该做到这一点。你可能忘记了LIMIT

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

    【讨论】:

      【解决方案4】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        相关资源
        最近更新 更多