2014-02-13 4 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']; 
}