2012-09-08 75 views
0

好吧我試圖構造一個查詢,它會給我結果a-z並將它們分組在主類別中。每個結果應該給我每個類別30或更多的列表。然而,這個查詢。MySQL多重排序/多組查詢

select teamName, CONCAT(UCASE(leagueType)) as league 
from fmr_teamNames 
group by leagueType 
order by teamName asc 

我只會得到每個類別的單個列表。我對某個觀點的理解是因爲我按條件使用了一個組。

當我重新排序查詢一點,並通過條件刪除組,我得到所有列表,但他們在z-a。當預期目標是類別A-Z,然後每個類別內結果A-Z

select teamName, CONCAT(UCASE(leagueType)) as league 
from fmr_teamNames 
order by leagueType asc 

目前這使我對每個結果的類別A-Z和Z-A。所以我有點困惑於如何更好地爲我的結果形成這個查詢,而不必使用像PHP這樣的外部干預來重新排序所有內容。

回答

1

我想你誤認爲是在MySQL中group_concat功能concat功能。 Concat會將兩個字符串附加在一起,而group_concat會將行合併在一起。

select teamName, group_concat(UCASE(leagueType)) as league 
from fmr_teamNames 
group by teamName 
order by teamName asc 

您的查詢似乎也對被集合列,而不是唯一一個你正在試圖找出使用group by

例子:

mysql> select * from table1; 
+---------+------+------+-------------+ 
| autonum | ID | name | metavalue | 
+---------+------+------+-------------+ 
|  1 | 1 | Rose | Drinker  | 
|  2 | 1 | Rose | Nice Person | 
|  3 | 1 | Rose | Runner  | 
|  4 | 2 | Gary | Player  | 
|  5 | 2 | Gary | Funny  | 
|  6 | 2 | Gary | NULL  | 
|  7 | 2 | Gary | Smelly  | 
+---------+------+------+-------------+ 
7 rows in set (0.00 sec) 

mysql> select concat(autonum, ID) from table1 group by ID; 
+---------------------+ 
| concat(autonum, ID) | 
+---------------------+ 
| 11     | 
| 42     | 
+---------------------+ 
2 rows in set (0.00 sec) 

mysql> select group_concat(autonum, ID) from table1 group by ID; 
+---------------------------+ 
| group_concat(autonum, ID) | 
+---------------------------+ 
| 11,21,31     | 
| 42,52,62,72    | 
+---------------------------+ 
2 rows in set (0.01 sec) 
+0

以及即時通訊使用CONCAT爲uppercasing在這個塞納里奧的leagueType作爲DB的目的,他們在全部小寫店。使用group_concat仍會產生相同的效果嗎? – chris

+0

@克里斯我已經更新我的答案與CONCAT及GROUP_CONCAT之間的差別(這是我認爲你正在尋找的功能)的例子。另外,你不需要使用concat來使用upper。你可以這樣做:'選擇teamName,UCASE(leagueType)作爲聯盟'沒有任何問題。 – Fluffeh

+0

有趣,好感謝你打破,實際上給了我怎麼回事的一個很好的視角。我只是開始與SQL表面劃傷整體看來,這些年來的彙集結果和工作的結果嚴格的服務器端的編碼得到什麼,我特別想實現我可以讓SQL不僅做一些繁重的前但通過這種方式可以優化我在緩慢運行的查詢中在服務器上的整體跳動。 – chris