2017-09-01 71 views
0

我试图获取行,按ID ASC排序,但我也希望随后这个结果被随机化。所以基本上,如果我想获取前15行,我希望它们随机出现,但是作为前15行。MySQL选择有序的行,然后随机化结果

基本上,我有一个框架加载了前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的这个?

回答

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()