2014-02-11 41 views
1

我試着用兩列訂購表:prioritetidMySQL的順序由兩個欄,一個ASC和一個RAND()

我要訂購prioritetASCidRAND()

查詢我到目前爲止是:

SELECT id, user_id, active, prioritet 
FROM `agents` 
WHERE user_id = ' + user_id + ' AND active = \'1\' 
ORDER BY prioritet ASC, id ASC, RAND() 

任何想法我做錯了什麼?

+1

請發表表格的結構,數據樣本和所需的輸出 –

回答

4

這是您的order by

ORDER BY prioritet ASC, id ASC, RAND() 

它由prioiritet然後id訂購。你想:

ORDER BY prioritet ASC, RAND() 

換句話說,不要按id排序。

這假設id在每一行都是唯一的(這是合理的名稱)。如果IDS不是唯一的,你需要一個更復雜的查詢:

SELECT a.id, a.user_id, a.active, a.prioritet 
FROM agents a join 
    (select id, rand() as r 
     from (select distinct id from agents) a 
    ) randid 
    on a.id = randid.id 
WHERE user_id = ' + user_id + ' AND active = \'1\' 
ORDER BY a.prioritet ASC, randid.r, a.id; 

也就是說,你需要一個隨機值適當地分配給每個ID,早在加入吧,和秩序。如果假設id是唯一的,那麼你只需要這個。

+0

即使這是正確的,爲什麼我們會按字段排序然後隨機排列?這是毫無意義的,肯定對我們的服務器資源並不好。我是對的嗎? –

+1

@MateiMihai。 。 。通過'rand()'排序不會比一般的排序差很多(這很昂貴)。 「優先級」字段包含優先級(基於名稱的猜測)。 OP大概希望所有的東西具有相同的優先級,但是以明確的隨機順序。這對於某些目的似乎是合理的。 –

+0

偉大的答案,這解決了我的問題!儘快接受。謝謝你一噸:) – Alosyius

相關問題