2014-02-13 3 views
0

초보자인데 문제가 생겼다. 식당에 관한 정보가 많은 테이블이 있는데, 여러 가지 가지가있는 레스토랑이있어서 아래처럼 당신은 레스토랑 C에 대한 내 테이블에 3 개의 항목이 있다는 것을 알 수 있습니다. 그리고 그것들을 하나의 이름으로 표시하려고합니다.MYSQL GROUP BY RECORD

Restaurant A: 
    123 B town 
Restaurant B: 
    123 C town 
Restaurant C: 
    1 A Town 
    2 B Town 
    3 C Town 

문제 : 내가 쿼리를 만들었습니다,하지만 그것은 단지 레스토랑에 대한 여러 레코드가있는 경우에도 각 레스토랑에 대한 하나의 항목을 표시합니다.

SELECT * FROM Restaurants 
GROUP BY NAME 
+0

GROUP BY의 기능은 일치하는 모든 값의 단일 레코드를 반환하는 것입니다. 따라서 각 레스토랑 이름별로 그룹화 한 경우에만 하나의 레코드 만 반환합니다. 당신이해야 할 모든 것 같은 소리는 ORDER BY – Anigel

+0

ORDER BY 그냥 내 SQL 기록을 주문하지만 그것은 내가 원하는 것을 보여줍니다. – Xitas

+0

이름을 한 번만 인쇄하고 변경된 내용 만 인쇄하려면 결과를 표시하는 방법을 보여주지 않고 변경하기 만하면됩니다. – Anigel

답변

2

샘플 데이터

resturant  | branch 
----------------------------- 
Restaurant A | 123 B town 
Restaurant B | 123 C town 
Restaurant C | 1 A Town 
Restaurant C | 2 B Town 
Restaurant C | 3 C Town 

쿼리

SELECT 
    resturant, 
    GROUP_CONCAT(branch) 
FROM Restaurants 
GROUP BY NAME 

결과 분기에

resturant  | branch 
----------------------------- 
Restaurant A | 123 B town 
Restaurant B | 123 C town 
Restaurant C | 1 A Town,2 B Town,3 C Town 

PHP를 사용 explode()

1

그룹별로 하나의 행만 표시되므로 이름별로 그룹화하지 않을 것입니다. 모든 행을 가져온 다음 연관 배열을 사용하여 PHP에서 그룹화합니다.

또는 GROUP_CONCAT을 사용하면 쉼표로 구분 된 도시 목록을 제공 할 수 있습니다.

예 : 내가 것

SELECT ame,some_id,GROUP_CONCAT(branch_town) from my_table GROUP BY NAME

+0

예를 보여 줄 수 있습니까? – Xitas

1

:

SELECT * FROM Restaurants 
ORDER BY NAME 

그리고 당신의 PHP 스크립트에서

- 나는 당신의 테이블 이름을 인식 아니에요 생각 나게, 그래서 이것은 어느 정도 의사입니다하시기 바랍니다.

$prevGroup = false; 
// How ever you normally iterate through your rows 
foreach($rows as $row) { 
    $group = $row['name']; 
    if($prevGroup != $group) { 
     echo $row['name']; 
     $prevGroup = $group; 
    } 
    echo $row['city']; 
}