我有一个查询,在一个网站上显示4张随机照片(我从这里得到了它(当我要求比ORDER BY RAND()
更快的东西时):
(SELECT `p1`.`id`, `p1`.`url`, `p1`.`hits`, `p1`.`created_at`,
`users`.`username`,
`users`.`displayname`
FROM pics p1
JOIN
(SELECT ceil(rand() *
(SELECT max(id)
FROM pics)) AS id
) AS p2
JOIN users
ON users.id = p1.user_id
WHERE p1.id >= p2.id
ORDER BY p1.id ASC limit 1
)
UNION ALL
(
SELECT `p1`.`id`, `p1`.`url`, `p1`.`hits`, `p1`.`created_at`,
`users`.`username`,
`users`.`displayname`
FROM pics p1
JOIN
(SELECT ceil(rand() *
(SELECT max(id)
FROM pics)) AS id
) AS p2
JOIN users
ON users.id = p1.user_id
WHERE p1.id >= p2.id
ORDER BY p1.id ASC limit 1
)
UNION ALL
(
SELECT `p1`.`id`, `p1`.`url`, `p1`.`hits`, `p1`.`created_at`,
`users`.`username`,
`users`.`displayname`
FROM pics p1
JOIN
(SELECT ceil(rand() *
(SELECT max(id)
FROM pics)) AS id
) AS p2
JOIN users
ON users.id = p1.user_id
WHERE p1.id >= p2.id
ORDER BY p1.id ASC limit 1
)
UNION ALL
(
SELECT `p1`.`id`, `p1`.`url`, `p1`.`hits`, `p1`.`created_at`,
`users`.`username`,
`users`.`displayname`
FROM pics p1
JOIN
(SELECT ceil(rand() *
(SELECT max(id)
FROM pics)) AS id
) AS p2
JOIN users
ON users.id = p1.user_id
WHERE p1.id >= p2.id
ORDER BY p1.id ASC limit 1
)
这是快速,但它似乎,一个特定的照片显示太频繁,大约每10次刷新页面,或左右。它没有id 1(它有1131),但是是某个用户的第一张照片。
难道是因为pics
表中的空白才是原因吗?我不知道还有什么原因。
SELECT id FROM pics WHERE id < 1131 ORDER BY id DESC LIMIT 1;
输出如下:
+-----+
| id |
+-----+
| 923 |
+-----+
发布于 2015-06-12 03:45:58
这有8种从表中选择随机行的“快速”方法。
有缺口的人工智能可能是最好的选择。
或者是50/10的把戏。
添加浮动列可能对你很好。
等。
https://dba.stackexchange.com/questions/103734
复制相似问题