Достать все товары, которые принадлежат более чем одной категории - MySQL
Формулировка задачи:
Я это сделал, вывел так: название продукта и название категории, через запятую, можно ли вывести не так, а что бы выводило каждый раз отдельно название продукта и категорию?
сейчас выводит так
Хочу что бы было примерно так
картошка - Овощи
картошка - Соки
бананы - Съедобное
бананы - Фрукты
бананы - Соки
SELECT product.name, COUNT(product.id), GROUP_CONCAT(category.name) FROM product LEFT JOIN order2 ON order2.product_id = product.id LEFT JOIN category ON category.id = order2.category_id GROUP BY product.id HAVING COUNT(product.id) > 1
картошка - Овощи, Соки бананы - Съедобное, фрукты, Соки
-- phpMyAdmin SQL Dump -- version 4.3.11 -- http://www.phpmyadmin.net -- -- Хост: 127.0.0.1 -- Время создания: Дек 27 2017 г., 10:23 -- Версия сервера: 5.6.24 -- Версия PHP: 5.6.8 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- База данных: `lesson9` -- -- -------------------------------------------------------- -- -- Структура таблицы `category` -- CREATE TABLE IF NOT EXISTS `category` ( `id` INT(11) NOT NULL, `name` VARCHAR(256) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- -- Дамп данных таблицы `category` -- INSERT INTO `category` (`id`, `name`) VALUES (1, 'Овощи'), (2, 'Соки'), (3, 'Фрукты'), (4, 'Съедобное'); -- -------------------------------------------------------- -- -- Структура таблицы `order2` -- CREATE TABLE IF NOT EXISTS `order2` ( `id` INT(11) NOT NULL, `product_id` INT(11) NOT NULL, `category_id` INT(11) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; -- -- Дамп данных таблицы `order2` -- INSERT INTO `order2` (`id`, `product_id`, `category_id`) VALUES (1, 2, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 4, 3), (6, 4, 2), (7, 7, 2), (8, 8, 2), (9, 5, 4); -- -------------------------------------------------------- -- -- Структура таблицы `product` -- CREATE TABLE IF NOT EXISTS `product` ( `id` INT(11) NOT NULL, `name` VARCHAR(256) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; -- -- Дамп данных таблицы `product` -- INSERT INTO `product` (`id`, `name`) VALUES (1, 'Огурец '), (2, 'Картошка'), (3, 'яблоки'), (4, 'бананы'), (5, 'апельсины'), (6, 'виноград '), (7, 'добрый'), (8, 'Моя семья'); -- -- Индексы сохранённых таблиц -- -- -- Индексы таблицы `category` -- ALTER TABLE `category` ADD PRIMARY KEY (`id`); -- -- Индексы таблицы `order2` -- ALTER TABLE `order2` ADD PRIMARY KEY (`id`); -- -- Индексы таблицы `product` -- ALTER TABLE `product` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT для сохранённых таблиц -- -- -- AUTO_INCREMENT для таблицы `category` -- ALTER TABLE `category` MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5; -- -- AUTO_INCREMENT для таблицы `order2` -- ALTER TABLE `order2` MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=10; -- -- AUTO_INCREMENT для таблицы `product` -- ALTER TABLE `product` MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=9; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Решение задачи: «Достать все товары, которые принадлежат более чем одной категории»
textual
Листинг программы
mysql> select -> p.name 'Продукт', c.name 'Категория' -> from product p -> join order2 o -> on o.product_id = p.id -> join category c -> on c.id = o.category_id; +-----------+-----------+ | Продукт | Категория | +-----------+-----------+ | картошка | овощи | | картошка | соки | | бананы | соки | | добрый | соки | | моя семья | соки | | яблоки | фрукты | | бананы | фрукты | | бананы | съедобное | | апельсины | съедобное | +-----------+-----------+ 9 rows in set (0.00 sec)