【问题标题】:Where In + Rand() + Limit在哪里 + 兰德() + 限制
【发布时间】:2018-08-12 06:45:08
【问题描述】:

我有一个这样的数据库“链接”:

id(primary) | name_id | type | url

我正在尝试为 5 个唯一的 name_id 找到一个随机 URL。我想只为一个人这样做:

SELECT url
FROM link
WHERE name_id=1
ORDER BY RAND()
LIMIT 1

它有效。所以,我想了五个,这样做:

SELECT url
FROM link
WHERE name_id IN (1,2,3,4,5)
ORDER BY RAND()
LIMIT 5

但是,它不起作用,因为它找到了 name_id=1 的 2 个结果和 name_id=2 的 3 个结果,例如(在 db 中,一个 name_id 可以有 10 多行)。

我想在 1 个请求 SQL 中为每个 name_id 返回一个随机 url。该怎么做?

【问题讨论】:

    标签: mysql sql random limit


    【解决方案1】:

    如果你知道这五个,那么你可以使用union all

    (SELECT url FROM link WHERE name_id = 1 ORDER BY RAND() LIMIT 1
    ) UNION ALL
    (SELECT url FROM link WHERE name_id = 2 ORDER BY RAND() LIMIT 1
    ) UNION ALL
    (SELECT url FROM link WHERE name_id = 3 ORDER BY RAND() LIMIT 1
    ) UNION ALL
    (SELECT url FROM link WHERE name_id = 4 ORDER BY RAND() LIMIT 1
    ) UNION ALL
    (SELECT url FROM link WHERE name_id = 5 ORDER BY RAND() LIMIT 1
    );
    

    如果存在性能问题,还有其他方法可以更快地获取“随机”行。

    但是,如果给定名称只有 10 个左右的 URL,那么上面的方法应该没问题。 . .尤其是在link(name_id, url) 上有索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多