2012-09-08 5 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

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를 사용하는 듯?

예 : 그들은 모두 소문자로 저장되는 DB와 같이이 senario의 leagueType을 uppercasing의 목적으로

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. group_concat을 사용해도 여전히 동일한 효과가 발생합니까? – chris

+0

@ chris concat과 group_concat의 차이점에 대한 예를 들어 답을 업데이트했습니다 (이는 내가 생각하는 기능입니다). 또한, 상단을 사용하기 위해 concat을 사용할 필요가 없습니다. 당신은 할 수 있습니다 :'아무 팀없이'teamName, UCASE (leagueType) 리그 '를 선택하십시오. – Fluffeh

+0

흥미롭지 만, 정말로 그게 무너지는 것에 감사 드리며, 실제로 나에게 무슨 일이 벌어지고 있는지 좋은 관점을 제공합니다. 전적으로 SQL을 사용하여 표면을 긁기 시작한 것 같습니다. 지난 몇 년 동안 결과를 풀링하고 서버 측 코딩을 엄격하게 수행하여 결과적으로 내가 원했던 것을 얻기 전에 SQL을 만들 수 있다는 것을 깨달았습니다. 그러나 그렇게함으로써 느린 실행 쿼리에서 서버의 전반적인 성능을 최적화 할 수 있습니다. – chris