我正在尝试获取由ID ASC排序的行,但我也希望该结果随后被随机化。所以基本上,如果我想获取前15行,我希望它们随机出来,但作为前15行。
基本上,我有一个框架可以加载前15个客户端,还有一个按钮“加载更多”以加载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?
答案 0 :(得分:1)
如果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()