2014-02-13 202 views
0

我是初學者,我被困在一個問題上,我有一張桌子,裏面有大量關於餐館的數據,我有一些餐館有多個分店,所以我想像下面一樣顯示他們你可以看到我的餐桌C有三個條目,我想用一個名字顯示它們。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']; 
}