powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом выборки один ко многим
4 сообщений из 4, страница 1 из 1
Помогите с запросом выборки один ко многим
    #39703970
ВизГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем имеется 4 таблицы:
catalog - каталог товаров
id pid name desc order

catalog_types - характеристики товара
item_id type_id value

types - характеристики
id pid name

types_group - типы характеристик
id name

Тип характеристики может быть 2х видов:
- из заданных значений, тогда в таблицу catalog_types записывается types.id в поле type_id.
- заданное вручную (цифровые значения, как правило), тогда в таблицу catalog_types записывается types_group.id*-1 в поле type_id и значение в поле value

Необходимо сделать выборку товаров из категории catalog.pid с несколькими заданными характеристиками фильтром.

в SQL совсем не силен, но накидал вот такую выборку.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT c.*
FROM catalogs c
INNER JOIN (
  SELECT ct.*, GROUP_CONCAT(ct.type_id SEPARATOR ', ') as filter
  FROM (
    SELECT f1.*
    FROM catalog_types as f1
    WHERE f1.type_id<0 
    UNION
    SELECT f2.item_id, f3.pid*(-1) as type_id, f2.type_id as value
    FROM catalog_types as f2
    INNER JOIN types as f3 ON f3.id=f2.type_id
    WHERE f2.type_id>0
  ) as ct
  WHERE  (ct.type_id=-19 and ct.value>=1 and ct.value<=3) OR (ct.type_id=-24 and ct.value=4)
  GROUP BY ct.item_id
  ) as ct ON ct.item_id = c.id and ct.filter='-19, -24'
WHERE c.pid in(1079)
ORDER BY c.order



Возможно ли ее улучшить и правильно ли вообще она составлена?
...
Рейтинг: 0 / 0
Помогите с запросом выборки один ко многим
    #39703993
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВизГ,

0) Это многие ко многим, а неодин ко многим.
1)


select *
from catalog c
where exists ( select * from catalog_types ct join types t on t.pid = ct.item_id and t.id = 4242 where t.name = 'BLABLA' )
and exists ( select * from catalog_types ct join types t on t.pid = ct.item_id and t.id = 4343 where t.name = 'BLUBLU' )

примерно так
...
Рейтинг: 0 / 0
Помогите с запросом выборки один ко многим
    #39703994
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВизГВ общем имеется 4 таблицы:


Возможно ли ее улучшить и правильно ли вообще она составлена?

По этому вопросу --- это я даже смотреть не хочу. Это не запрос а лютый #$#%#
...
Рейтинг: 0 / 0
Помогите с запросом выборки один ко многим
    #39704155
ВизГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, в принципе получилось. Но только опять вопрос, а если, к примеру 15 характеристик в фильтре, то мы получаем 15 подзапросов на EXIST это нормально?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом выборки один ко многим
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]