2012-05-16 30 views
-1

我需要按日期首先我查詢...Mysql的排序,然後分組查詢在MySQL

所以我用這個:

SELECT * FROM `mfw_navnode` order by `id` DESC 

我想訂購從去年我的成績第一。

那麼什麼,我試圖做

是在它添加查詢,這組我的結果通過節點名稱..

的結果應該由be..all「類別分組的頂層節點/節點名稱類型」,而我看到的是奉命最高的爲它的第一個查詢類別的第一個節點..

我認爲做這樣的事情:

SELECT * FROM( 
SELECT * FROM `mfw_navnode` order by `id` DESC) AS DD 
WHERE (node_name='Eby' OR node_name='Laa' OR node_name='MIF' OR node_name='Amaur' OR node_name='Asn') 
GROUP BY DD.node_name 

我沒有得到任何結果..或任何來自phpmyadmin的迴應,當我輸入結果..

我在哪裏得到錯誤?

注意,我不想我的羣結果,然後命令他們..

我希望他們進行排序,然後進行分組。作爲後grouped..I希望每個組的結果具有最高值..from組中的其他行

+0

您可以包括一個樣本集,什麼結果應該喜歡? –

回答

1

這是不夠的先進行排序,因爲即使那麼MySQL不保證其上記錄它會爲每個組選擇。從the manual

該服務器是可以自由選擇從每個組中的任何值,所以,除非它們是相同的,所選擇的值是不確定的。

相反,您必須確定所關心的記錄與子查詢,那麼爲了獲得相關的值再次加入你的表結果:

SELECT * 
FROM mfw_navnode NATURAL JOIN (
     SELECT node_name, MAX(id) AS id FROM mfw_navnode GROUP BY node_name 
     ) AS DD 
WHERE node_name IN ('Eby', 'Laa', 'MIF', 'Amaur', 'Asn') 
+0

很好的答案...你已經啓發了我..非常接近解決方案,但它沒有 –

-1

下面的SQL可以得到你所需要的輸出:

SELECT node_name, MAX(id) 
FROM mfw_navnode 
GROUP BY node_name 
ORDER BY node_name 
0

有序的ID和基團通過NODE_NAME

SELECT * FROM `mfw_navnode` 
WHERE (node_name='Eby' OR node_name='Laa' OR node_name='MIF' OR node_name='Amaur' OR node_name='Asn') 
GROUP BY DD.node_name 
ORDER BY `id` DESC 
0

分組通常用於當使用一些聚集函數(求和,最大值,最小值,計數等)。如果你不在查詢中使用這樣的功能,那麼你爲什麼要分組結果?

無論如何,這應該做的伎倆:

SELECT * 
FROM mfw_navnode 
WHERE id IN (SELECT id 
    FROM mfw_navnode 
    WHERE node_name IN ('Eby', 'Laa', 'MIF', 'Amaur', 'Asn') 
    GROUP BY node_name) 
ORDER BY id 
-1

我看到兩個問題,你的SQL。

1)在直列下訂單選擇什麼也不做(並可能導致你的分組上的node_name錯誤) 2),但你是不是聚合任何

SELECT COUNT(id) as row_count, node_name FROM(SELECT * FROM mfw_navnode) AS DD 
WHERE (node_name='Eby' OR node_name='Laa' OR node_name='MIF' OR node_name='Amaur' OR node_name='Asn') 
GROUP BY DD.node_name 
order by node_name desc 

進一步我不知道爲什麼你需要的直列選擇作爲其中可以簡單地對原有的選擇(也許你有一些更復雜的事情,你沒有顯示)

SELECT COUNT(id) as row_count, node_name 
from mfw_navnode 
WHERE node_name='Eby' OR node_name='Laa' OR node_name='MIF' OR node_name='Amaur' OR node_name='Asn' 
GROUP BY node_name 
order by node_name desc