junk1114
@junk1114
Web-программист

Как правильно составить выборку из таблиц по связи многие-ко-многим и сделать CONCAT в MySQL?

Наверное уже надоевший всем вопрос, но все же. Штудировать книги по SQL к сожалению времени пока не хвататет, а запрос написать надо.
Есть 3 таблицы:
products
| id | name    |
|----|---------|
| 1  | Товар 1 |
| 2  | Товар 2 |

sizes
| id | value |
|----|-------|
| 1  | x     |
| 2  | xs    |
| 3  | m     |

И связующая таблица products_sizes со связанными id предыдущих таблиц
| product_id | size_id |
|------------|---------|
| 1          | 1       |
| 1          | 2       |
| 2          | 2       |

Как здесь сделать выборку и конкатенацию, что бы в итоге получилась таблица вроде этой:
| id | name    | sizes |
|----|---------|-------|
| 1  | Товар 1 | x;xs  |
| 2  | Товар 2 | m     |

Спасибо
  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
@Joysi75
Примерно так (пишу с левого компа, где нет mysql - если что отредактируйте немного)
select product_id as id, products.name,
  group_concat(sizes.value separator ';') as sizes 
from product_sizes, sizes, products 
where product_id=products.id and size_id=sizes.id 
group by product_id


Добавлено после комментария автора топика:
Если необходимо выводить и те товары , у которых не указан размер, тогда:
select products.id, products.name, 
  group_concat(sizes.value separator ';') as sizes 
from product_sizes 
  inner join sizes on (size_id=sizes.id) 
  right join products on (product_id=products.id) 
group by product_id order by id;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы