[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: sql group concat
Snnick
Всем привет. Подскажите пожалуйста как правильнее сделать.
Есть необходимость вывести список категорий на странице в каждой категории есть такая информация:
-Название категории
-При наведении на категорию выезжает блок с под категориями в котором содержится список под категорий и на против каждой под категории первые три товара по алфавиту.

Придумал два варианта вывода этой информации.

Вариант №1
Вывести все категории в одном Sql запросе с помощью двух group concat, а именно выбираем все категории джоиним под категории и товары потом с помощью group concat через двоеточие разбиваем под категории делаем group by по id категории, заворачиваем этот запрос еще в один Select и делаем group concat по товарам через запятую group by по id категории и под категории, ставим лимит 3. В итоге получается "Имя категории" "Имя под категории: товар, товар, товар"
Потом в foreach с помощью explode по двоеточию и explode по запятой превращаем все в массивы и во вьюхе выводим полученную информацию.

Вариант №2
Первым запросом вытягиваем категории.
В foreach формируем id всех категорий
Передаем массив id категорий во второй запрос и вытягивает вторым запросом под категории по id категории.
С помощью group concat разбиваем товары через запятую group by по id под категории. Ставим лимит на 3 товара по алфавиту.
Потом точно так же формируем массив и выводим это все во вьюху.

Возможно у Вас есть еще какие то варианты вывода данной информации. С учетом оптимизации кода и быстродействия выполнения запроса.
Игорь_Vasinsky
http://zabolotnev.com/mysql-nested-sets

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Snnick
Цитата (Игорь_Vasinsky @ 11.04.2017 - 11:09)
http://zabolotnev.com/mysql-nested-sets

Интересная статья, ранее не работал с моделью Nested Sets, но есть ли смысл делать столько манипуляций в базе данных если у меня фактически "товар" это последний уровень вложенности то есть получается 3 уровень(категория->под категория->товар) и вытаскивать информацию с 3 уровнями вложенности нужно только на странице с фильтрами категорий?
На остальных страницах вытаскивается максимум 2 уровень.
Игорь_Vasinsky
я всего-лишь указал на одно из популярных решений для категорий.

если для тебя это лишние действия - то руководствуйся простым правилом - меньше запросов - легче серверу.

у тебя это первый вариант

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Snnick
Цитата (Игорь_Vasinsky @ 11.04.2017 - 12:01)
я всего-лишь указал на одно из популярных решений для категорий.

если для тебя это лишние действия - то руководствуйся простым правилом - меньше запросов - легче серверу.

у тебя это первый вариант

Окей, спасибо. Действия возможно не лишние, единственное что пугает, так это то что при изменении в базе информации нужно постоянно обновлять таблицу модели Nested Sets, а так как я никогда не работал с Nested Sets, могу что то испортить в базе. А с точки зрения производительности и быстроты выполнения запроса в сколько раз будет эффективнее использования Nested Sets?
Это я спрашиваю с целью, если производительность действительно на много лучше, то возможно все же стоит заняться изучением данного решения.
Valick
Цитата (Игорь_Vasinsky @ 11.04.2017 - 11:01)
руководствуйся простым правилом - меньше запросов - легче серверу

ну да, мускула холим и лелеем (наконец-то), а апач-то нам не родной...

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

_____________
Стимулятор ~yoomoney - 41001303250491
Игорь_Vasinsky
Цитата
действительно на много лучше,


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Snnick
Цитата (Игорь_Vasinsky @ 11.04.2017 - 12:21)
Цитата
действительно на много лучше,

Ок, тогда буду читать документацию.
Гость_chee
Одним запросом можно все вытянуть

Выбираем категории, джойним подкатегории для категорий, для подкатегорий джойним продукты (запросик с продуктами будет не изи). Готово. В php полученный данные распихиваем на древовидный ассоциативный массив.

[sql]
SELECT c.id AS cat_id, c.name AS cat_name, c2.id AS sub_cat_id, c2.name AS sub_cat_name FROM cats AS c INNER JOIN cats AS c2 ON c2.parent_id = c.id INNER JOIN (какой-то запрос на выборку продуктов) AS p ON p.cat_id = c2.id
Valick
Цитата (Гость_chee @ 11.04.2017 - 11:48)
какой-то запрос на выборку продуктов

давайте конкретнее, запрос на выборку подкатегорий и соответственно трёх по алфавиту продуктов для каждой категории.

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.