Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> sql group concat, Вывод категорий с под категоями и товарами подкатегорий
Snnick  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 26
Пользователь №: 42681
На форуме: 1 год, 5 месяцев, 5 дней
Карма:




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

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

Вариант №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 товара по алфавиту.
Потом точно так же формируем массив и выводим это все во вьюху.

Возможно у Вас есть еще какие то варианты вывода данной информации. С учетом оптимизации кода и быстродействия выполнения запроса.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26457
Пользователь №: 21350
На форуме: 7 лет, 5 месяцев, 4 дня
Карма: 739






--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snnick  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 26
Пользователь №: 42681
На форуме: 1 год, 5 месяцев, 5 дней
Карма:




Цитата (Игорь_Vasinsky @ 11.04.2017 - 11:09)
http://zabolotnev.com/mysql-nested-sets

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

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26457
Пользователь №: 21350
На форуме: 7 лет, 5 месяцев, 4 дня
Карма: 739




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

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

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


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snnick  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 26
Пользователь №: 42681
На форуме: 1 год, 5 месяцев, 5 дней
Карма:




Цитата (Игорь_Vasinsky @ 11.04.2017 - 12:01)
я всего-лишь указал на одно из популярных решений для категорий.

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

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

Окей, спасибо. Действия возможно не лишние, единственное что пугает, так это то что при изменении в базе информации нужно постоянно обновлять таблицу модели Nested Sets, а так как я никогда не работал с Nested Sets, могу что то испортить в базе. А с точки зрения производительности и быстроты выполнения запроса в сколько раз будет эффективнее использования Nested Sets?
Это я спрашиваю с целью, если производительность действительно на много лучше, то возможно все же стоит заняться изучением данного решения.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5671
Пользователь №: 35718
На форуме: 4 года, 8 месяцев, 28 дней
Карма: 176




Цитата (Игорь_Vasinsky @ 11.04.2017 - 11:01)
руководствуйся простым правилом - меньше запросов - легче серверу

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

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


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26457
Пользователь №: 21350
На форуме: 7 лет, 5 месяцев, 4 дня
Карма: 739




Цитата
действительно на много лучше,


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snnick  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 26
Пользователь №: 42681
На форуме: 1 год, 5 месяцев, 5 дней
Карма:




Цитата (Игорь_Vasinsky @ 11.04.2017 - 12:21)
Цитата
действительно на много лучше,

Ок, тогда буду читать документацию.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_chee  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Одним запросом можно все вытянуть

Выбираем категории, джойним подкатегории для категорий, для подкатегорий джойним продукты (запросик с продуктами будет не изи). Готово. В 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
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5671
Пользователь №: 35718
На форуме: 4 года, 8 месяцев, 28 дней
Карма: 176




Цитата (Гость_chee @ 11.04.2017 - 11:48)
какой-то запрос на выборку продуктов

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


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса