MySQL选择有序行,然后随机化结果

时间:2017-09-01 19:24:03

标签: mysql random sql-order-by

我正在尝试获取由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?

1 个答案:

答案 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()
相关问题