2014-09-27 3 views
1

У меня есть две MySQL таблицы:SQL-запрос выбрать и группа по

Таблица "панель":

+--------+----------+---+ 
| id_panel | name_panel | 
+-----------------------+ 
| 1 | Some name | 
| 2 | Other name | 
+--------+--------------+ 

Таблица "panel_power":

+--------+----------+----+ 
| id_panel | panel_power | 
+------------------------+ 
| 1 |  300W  | 
| 1 |  500W  | 
| 2 |  450W  | 
| 2 |  300W  | 
+--------+---------------+ 

мне нужно имена вывод панели с все связанные с ними полномочия.

Как:

Some panel name: 300W, 500W 
Other name: 450W, 300W 

ответ

2

вы можете объединить группу CONCAT и CONCAT, чтобы получить результат в одну колонку, хотя это не рекомендуется, если вы планируете при хранении данных внутри такой таблицы

SELECT CONCAT(p.name_panel, 
       ': ', 
       GROUP_CONCAT(pp.panel_power ORDER BY pp.panel_power SEPARATOR ', ') 
      ) as "Provided Power" 
FROM panels p 
JOIN panel_powers pp ON p.id_panel = pp.id_panel 
GROUP BY p.name_panel 

Fiddle Demo

В качестве примечания, если вы планируете размещать эти данные в списке на веб-странице или что-то в этом роде, я бы рекомендовал вам вытащить идентификатор, связанный с панелью имен, и иметь это как элемент данных в вашем списке .. таким образом вы можете легко вытащить его, если вам нужно попасть на сервер ... Если вы не хотите, то вам придется попробовать и разобрать имя_панель, чтобы выяснить, где он находится

+0

Спасибо за решение ! Каким будет рекомендуемое решение? – Leonajs

+1

@ Leonajs хорошо все зависит от того, что вы делаете ... если вы вытаскиваете данные, чтобы отобразить их определенным образом, тогда это будет хорошо. Однако, если вы вытаскиваете его так, чтобы хранить его в таблице то это действительно плохо .. дизайн был бы плохим .. Я был не совсем ясен, когда я сказал, что это не рекомендуется, дайте мне обновить :) .. +1 ответный, спасибо –

+1

@Leonajs Я только что отредактировал с запиской о том, на веб-странице и как я буду заниматься этим, если вы хотите, чтобы я объяснил больше, чем я могу :) –

1

Вы можете использовать group_concat() функцию:

select p.name_panel, group_concat(pp.panel_power separator ', ') as powers 
from panels p join 
    panel_powers pp 
    on pp.id_panel = p.id 
group by p.name_panel; 
Смежные вопросы