[只有少数记录由mysql(-php)代码中的RAND()排序,其余记录显示在底部,

问题描述 投票:1回答:1

我陷入了一件非常简单的事情,我无法通过。请帮忙我有500条记录的表格,并用于在html网页上每页显示100条记录。我希望始终使用ORDER BY RAND()来显示前100条记录(或任何特定选择的100条记录),而其余400条记录则按表中的顺序显示。

详细说明-我需要mysql_query中的帮助,该返回前100条记录始终按RAND()进行订购,但其余记录应按表中的原样返回。应该总是有那些选择的100条记录,那些也应该总是在前100个位置随机返回,但顺序是随机的。请帮助我,我将尽力。在此先感谢

php mysql random sql-order-by
1个回答
0
投票

您可以通过从表中进行两个子选择的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

Demo on dbfiddle

© www.soinside.com 2019 - 2024. All rights reserved.