我陷入了一件非常简单的事情,我无法通过。请帮忙我有500条记录的表格,并用于在html网页上每页显示100条记录。我希望始终使用ORDER BY RAND()来显示前100条记录(或任何特定选择的100条记录),而其余400条记录则按表中的顺序显示。
详细说明-我需要mysql_query中的帮助,该返回前100条记录始终按RAND()进行订购,但其余记录应按表中的原样返回。应该总是有那些选择的100条记录,那些也应该总是在前100个位置随机返回,但顺序是随机的。请帮助我,我将尽力。在此先感谢
您可以通过从表中进行两个子选择的UNION
来实现此目的,第一个选择要随机排序的行,第二个选择剩余的行。如果行来自第一部分,则UNION
的结果将随机排序;如果行来自第二部分,则insert_date
的结果将随机排序。他们来自哪一部分是使用额外的列定义的。
(SELECT *, 1 AS random_ordered
FROM test
ORDER BY insert_date DESC
LIMIT 3
)
UNION
(SELECT *, 0 AS random_ordered
FROM test
ORDER BY insert_date DESC
LIMIT 3, 12
)
ORDER BY random_ordered DESC,
CASE WHEN random_ordered = 1 THEN RAND()
ELSE insert_date
END DESC
输出(用于小型15行演示)
id insert_date value random_ordered
14 2019-12-14 3 1
13 2019-12-13 1 1
15 2019-12-15 0 1
12 2019-12-12 8 0
11 2019-12-11 9 0
10 2019-12-10 0 0
9 2019-12-09 4 0
8 2019-12-08 3 0
7 2019-12-07 7 0
6 2019-12-06 1 0
5 2019-12-05 3 0
4 2019-12-04 5 0
3 2019-12-03 8 0
2 2019-12-02 5 0
1 2019-12-01 6 0