MySQL Select 排序行,然后随机化结果
MySQL Select ordered rows, then randomize the result
我正在尝试获取按 ID ASC 排序的行,但我也希望该结果之后随机化。所以基本上,如果我想获取前 15 行,我希望它们随机出现,但作为前 15 行。
基本上,我有一个框架可以加载前 15 个客户端,还有一个按钮 "load more" 可以加载另外 15 个客户端。我只是希望相同的 15 个客户按订单 ID 出现,但他们的位置是随机的。
到目前为止,这是我所拥有的,但最后的 RAND() 没有任何影响:
SELECT wp_posts.ID, wp_posts.post_title,
wp_postmeta.meta_value,
axess_clients.client_nom,
axess_clients.site
FROM wp_posts
LEFT JOIN axess_clients ON axess_clients.client_id = wp_posts.ID
LEFT JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID
WHERE wp_posts.post_type='clients' AND wp_posts.post_status='publish'
AND wp_postmeta.meta_key='_thumbnail_id'
ORDER BY wp_posts.ID ASC, RAND() LIMIT 15 OFFSET ".$_POST['data']
有没有办法通过 MySQL 做到这一点,或者我真的必须为此退出 PHP 吗?
当您在 ORDER BY
中有多个表达式时,第二个表达式用于在第一个表达式相等的组内排序。它无法对已按第一个表达式排序的行重新排序。
要重新排序,您需要将第一个排序放在子查询中。
SELECT *
FROM (
SELECT wp_posts.ID, wp_posts.post_title,
wp_postmeta.meta_value,
axess_clients.client_nom,
axess_clients.site
FROM wp_posts
LEFT JOIN axess_clients ON axess_clients.client_id = wp_posts.ID
LEFT JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID
WHERE wp_posts.post_type='clients' AND wp_posts.post_status='publish'
AND wp_postmeta.meta_key='_thumbnail_id'
ORDER BY wp_posts.ID ASC
LIMIT 15 OFFSET " . $_POST['data']) AS x
ORDER BY RAND()
我正在尝试获取按 ID ASC 排序的行,但我也希望该结果之后随机化。所以基本上,如果我想获取前 15 行,我希望它们随机出现,但作为前 15 行。
基本上,我有一个框架可以加载前 15 个客户端,还有一个按钮 "load more" 可以加载另外 15 个客户端。我只是希望相同的 15 个客户按订单 ID 出现,但他们的位置是随机的。
到目前为止,这是我所拥有的,但最后的 RAND() 没有任何影响:
SELECT wp_posts.ID, wp_posts.post_title,
wp_postmeta.meta_value,
axess_clients.client_nom,
axess_clients.site
FROM wp_posts
LEFT JOIN axess_clients ON axess_clients.client_id = wp_posts.ID
LEFT JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID
WHERE wp_posts.post_type='clients' AND wp_posts.post_status='publish'
AND wp_postmeta.meta_key='_thumbnail_id'
ORDER BY wp_posts.ID ASC, RAND() LIMIT 15 OFFSET ".$_POST['data']
有没有办法通过 MySQL 做到这一点,或者我真的必须为此退出 PHP 吗?
当您在 ORDER BY
中有多个表达式时,第二个表达式用于在第一个表达式相等的组内排序。它无法对已按第一个表达式排序的行重新排序。
要重新排序,您需要将第一个排序放在子查询中。
SELECT *
FROM (
SELECT wp_posts.ID, wp_posts.post_title,
wp_postmeta.meta_value,
axess_clients.client_nom,
axess_clients.site
FROM wp_posts
LEFT JOIN axess_clients ON axess_clients.client_id = wp_posts.ID
LEFT JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID
WHERE wp_posts.post_type='clients' AND wp_posts.post_status='publish'
AND wp_postmeta.meta_key='_thumbnail_id'
ORDER BY wp_posts.ID ASC
LIMIT 15 OFFSET " . $_POST['data']) AS x
ORDER BY RAND()