Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: выборка по сериям и куча ещё...
Покинул форум
Сообщений всего: 48
Дата рег-ции: Янв. 2012
Помог: 0 раз(а)
задача
1. выбрали товар люстра (variantID = 43) и характеристику его 12 лампочек (variantID = 136)
2. определяем серии (seria_productID) где есть такой товар
3. проверяем есть ли в этой серии ещё бра и торшер (variantID in (3,41)), групируем по сериям, и делаем первые 20 серий (постраничная навигация)
4. добавляем к этим сериям все товары, и делаем сортировку где в начале выводим люстры (variantID = 43)
---
запрос получился очень тормозной................
кто-то знает как оптимизировать ?
----------
Сам зациклился, может кто-то пнёт в каком направлении идти ?
-----------
результат explain
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE filtr_table range ihc1 ihc1 4 \N 22587 Using where; Using temporary; Using filesort
2. добавляем, - определяем, есть ли в этой серии ещё товары с variantID in (3,41), групируем по сериям, показывать первые 20 серий
результат explain
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY b range ihc1 ihc1 4 \N 2808 Using where
1 PRIMARY <derived2> ALL \N \N \N \N 531 Using where
2 DERIVED filtr_table range ihc1 ihc1 4 \N 22587 Using where
3. добавляем , - показать все товары по этим сериям, добавить выбранным товарам их описание, сортируем, в начале показывать основной товар с пункта 1
результат explain
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL \N \N \N \N 20 Using temporary
1 PRIMARY b2 index \N ihc3 16 \N 325047 Using index
1 PRIMARY d eq_ref PRIMARY PRIMARY 4 dolina.b2.productID 1
2 DERIVED b range ihc1 ihc1 4 \N 2808 Using where
2 DERIVED <derived3> ALL \N \N \N \N 531 Using where
3 DERIVED filtr_table range ihc1 ihc1 4 \N 22587 Using where
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
0) Отформатируйте, пожалуйста, внятно запросы.
1) Напишите, какие где стоят индексы.
2) приложите результаты explain analyze для postgresql или просто explain, если у вас другая субд.
----- PostgreSQL DBA
Sig
Отправлено: 26 Февраля, 2016 - 16:18:53
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Янв. 2012
Помог: 0 раз(а)
я добавил индексы и explain
если есть программы как определить оптимальный индекс для запроса напишите пож-та ?
или почитать хорошо, как их использовать
---------
по запросам что я не так оформил напишите, я всё поправлю
Мелкий
Отправлено: 26 Февраля, 2016 - 16:47:00
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Оформить как-нибудь, чтобы запрос мог прочитать человек, а не только машина. Например,
Какой оптимальный индекс из имеющихся в наличии - это решает планировщик базы. И по explain как раз видно, что он предполагает использовать.
Оптимальный индекс для запроса - вопрос к человеку.
Судя по тому, что вы упорно не хотите называть, какая у вас база - видимо, речь о MySQL. Тогда вот эта книжка: http://shop[dot]oreilly[dot]com/product/0636920022343[dot]do
пробую осмыслить, что есть и что из этого надо получить
----- PostgreSQL DBA
Sig
Отправлено: 26 Февраля, 2016 - 18:22:34
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Янв. 2012
Помог: 0 раз(а)
привёл к человеческому виду
да привильно MySQL
Мелкий
Отправлено: 27 Февраля, 2016 - 11:00:40
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Sig пишет:
задача
1. выбрали товар люстра (variantID = 43) и характеристику его 12 лампочек (variantID = 136)
2. определяем серии (seria_productID) где есть такой товар
3. проверяем есть ли в этой серии ещё бра и торшер (variantID in (3,41)), групируем по сериям, и делаем первые 20 серий (постраничная навигация)
4. добавляем к этим сериям все товары, и делаем сортировку где в начале выводим люстры (variantID = 43)
Вольная трактовка с минимизацией:
Нужно найти все seria_productID, в рамках одной серии обязательно должны быть люстра, лампочка, бра и торшер, определяемые по variantID, соответственно номера 43, 136, 3 и 41
Для этих seria_productID вывести все товары, в начале люстры.
По задаче невостребованными данными осталось - что такое 12 лампочек и как их надо учитывать?
Если я верно интерпретировал задачу, то решить можно как-то так:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.