随机检索 id_post sql
retrieve random id_post sql
我有这个table:
+---------+------+
| id_post | post |
+---------+------+
| 24 | A |
| 26 | B |
| 39 | C |
| 57 | D |
+---------+------+
我想随机取回一个id_post
SELECT id_post
FROM posts
WHERE rand()
我想检索单个值 24
、26
、39
或 57
。
我怎样才能做到这一点?
你似乎想要 ORDER BY RAND()
和 LIMIT 1
:
SELECT id_post
FROM posts
ORDER BY rand()
LIMIT 1
您没有说明您使用的是哪个数据库。 RAND()
和 LIMIT 1
的实际语法因数据库而异。以上内容适用于 MySQL。其他数据库中也有类似的语法,例如:
Postgres:
SELECT id_post
FROM posts
ORDER BY random()
LIMIT 1
SQL 服务器:
SELECT TOP (1) id_post
FROM posts
ORDER BY newid()
如果你只有四行,那么你怎么做并不重要。但是,如果您的 table 很大,您希望限制排序的数据量。
一种方法是:
select p.id_post
from posts p cross join
(select count(*) as cnt from posts) pp
where rand() < 100.0 / pp.cnt
order by rand()
limit 1;
虽然这需要扫描 table,但不需要对整个 table.
进行排序
我有这个table:
+---------+------+
| id_post | post |
+---------+------+
| 24 | A |
| 26 | B |
| 39 | C |
| 57 | D |
+---------+------+
我想随机取回一个id_post
SELECT id_post
FROM posts
WHERE rand()
我想检索单个值 24
、26
、39
或 57
。
我怎样才能做到这一点?
你似乎想要 ORDER BY RAND()
和 LIMIT 1
:
SELECT id_post
FROM posts
ORDER BY rand()
LIMIT 1
您没有说明您使用的是哪个数据库。 RAND()
和 LIMIT 1
的实际语法因数据库而异。以上内容适用于 MySQL。其他数据库中也有类似的语法,例如:
Postgres:
SELECT id_post
FROM posts
ORDER BY random()
LIMIT 1
SQL 服务器:
SELECT TOP (1) id_post
FROM posts
ORDER BY newid()
如果你只有四行,那么你怎么做并不重要。但是,如果您的 table 很大,您希望限制排序的数据量。
一种方法是:
select p.id_post
from posts p cross join
(select count(*) as cnt from posts) pp
where rand() < 100.0 / pp.cnt
order by rand()
limit 1;
虽然这需要扫描 table,但不需要对整个 table.
进行排序