2011-09-05 132 views
8

我需要做GROUP BYORDER BY。我不明白爲什麼MySQL不支持。 這是我的代碼:GROUP BY後ORDER BY

SELECT 
    `pages`.`id`, 
    `contents`.`id_language`, 
    [...] 

[...] 

ORDER BY 
    FIND_IN_SET(`languages`.`id`, '3') DESC 

[the GROUP BY] 

結果將是這樣的:

id | id_language | ... 
1 3 
1 1 
2 3 
2 5 
2 1 

我需要按ID,我只需要在第一個結果,我需要在一個視圖中進行保存。因爲這個,我無法使用SUBQUERY。

結果必須是:

id | id_language | ... 
1 3 
2 3 

注意:不要被迷惑id_language = 3,因爲它不是一個規則。

回答

1

分組依據將分組結果集,通常用於聚合。 Order By是排序結果的方式。

+0

所以我不能用GROUP BY爲這種情況? –

1

您可能需要在原始查詢中添加一個GROUP BY的附加列,以及您目前正在分組的任何列。該列在分組時可用於後續訂購。例如:

SELECT 
    SUM(IF(`languages`.`id` = 3, 1, 0)) AS languageOrder, 
    `pages`.`id`, 
    `contents`.`id_language`, 
    [...] 

[...] 

[GROUP BY...] 

ORDER BY languageOrder DESC 

我打算讓languageOrder對包含語言#3的組爲正,否則爲0。因此包含語言3的組將位於頂部。

+0

ORDER BY正常工作,問題是我只需要找到每個ID的第一個值。 –

+0

所以如果我理解正確,你真正想要的是對於每個組,你想要返回哪一行有3個language_id。如果只有一行(或沒有)有一個3,那麼你可以做WHERE language_id = 3.如果可以有多個,那麼SQL如何決定向你展示哪一個? –

+0

Nop ...結果就像'1 | 3','1 | 5','2 | 2','2 | 5',例如...我需要得到,對於每個ID,第一次找到ROW ...所以,這個例子的結果只是'1 | 3'和'2 | 2'。 –

0

非常有趣,嘗試

select * from your_table 
where id_language=3 
order by id; 

據我所知道的,規則集id_language=3
這使得沒有區別使用where

7
SELECT id, idl 
FROM (SELECT 
    `pages`.`id` as id, 
    `contents`.`id_language` as idl, 
    [...] 

[...] 

ORDER BY 
    FIND_IN_SET(`languages`.`id`, '3') DESC 
    ) d 
GROUP BY d.id