2017-09-01 51 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()