Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
04.09.2017, 12:00
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
Приветствую всех! Есть две связанные таблицы: products и properties В таблице products поля: id | prod_title | prod_price В таблице properties поля: prod_id | property_name | property_value Связь: properties.prod_id => products.id Для одного товара в таблице products может быть много позиций в таблице properties. Например: Есть товар в products (id = 1): 1 | Туфли | 3000 И его свойства в таблице properties: 1 | Размер | 37 1 | Пол | Женский 1 | Цвет | Белый 1 | Каблук | Высокий ... и т.д. Мне нужно получить товары по нескольким значениям свойств... Например выбрать все товары, у которых цвет белый и пол женский... Пытаюсь сделать так: Код: sql 1. 2. 3. 4. 5. 6. Если убрать последнее условие 'AND' - то работает. Но не получается сделать выборку сразу по двум свойствам... Прошу помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:06
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
atillus, почитать про OR, [NOT] EXISTS, GROUP BY + HAVING ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:07
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
почитайте про IN (SELECT ...) или EXISTS (SELECT ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:08
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
atillus, Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:08
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
Добрый Э - Эхatillus, почитать про OR, [NOT] EXISTS, GROUP BY + HAVING group by то нафига ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:10
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:19
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
Код: sql 1. Как просто! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:23
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
Но такой вариант работает неверно, ибо если написать Код: sql 1. отдаст все белого цвета :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:27
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
подзапрос AND EXISTS - правильно работает. Спасибо за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:27
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
atillus, Избавиться от LEFT Использовать OR Группировать по id Оставить те id, где count по id строго равен числу отбираемых параметров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 12:30
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
блин, долго писал, уже ответили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.09.2017, 14:02
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
atillusтакой вариант работает неверно, ибо если написать Код: sql 1. отдаст все белого цветаЭто ты ляпнул, чтобы хоть что-то сказать? лучше попробовал бы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.09.2017, 05:51
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
Akina, а почему условие связывания не в ON, а в WHERE? Так лучше или пофиг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.09.2017, 08:27
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
paverпочему условие связывания не в ON, а в WHERE? Абсолютно пофиг. Разница - чисто синтаксическая. Запрос один, тексты просто разные. Равно как и между терминами "условия связывания" и "условия отбора" в случае внутреннего связывания разница чисто в наборе использованных букв (а у автора связывание именно такое, внутреннее, просто он не знает о существовании INNER JOIN и везде лепит LEFT). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.09.2017, 09:17
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
Akina, понял, спасибо. Просто думаю, что коль скоро в информационной модели между сущностиями есть (подразумевается) связь (один-ко-многим), то желательно ее и в запросе отобразить. Ну, методически правильнее, что ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.09.2017, 09:33
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
paverколь скоро в информационной модели между сущностиями есть (подразумевается) связь (один-ко-многим), то желательно ее и в запросе отобразить. Она и отображается, собсно... связь - не более чем некое выражение, которое истинно для связанных записей. и ложно для несвязанных. Всё. Местоположение этого выражения сущностью связи не определяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.09.2017, 13:38
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
Akina Код: sql 1. 2. 3. 4. 5. 6. 7. Я давно знаю о этом твоём подходе, и он мне не нравится. Без причин, просто не нравится. Но я всё время пытался найти контрпример, когда эта твоя фигня не будет работать. И ВОТ ЭВРИКА! Если в таблице свойств случайно продублируются записи ('Цвет','Белый'), или ('Пол','Женский') (будет более одной), то твой запрос не вернёт данные. Но ты выкрутишься, напишешь Код: sql 1. ... как же тебя прижучить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.09.2017, 15:13
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
MasterZivон мне не нравится. Без причин, просто не нравится.Верю. Но у него есть хорошее свойство - универсальность. [quote MasterZiv]Если в таблице свойств случайно продублируются записи[SRC sql]... то первым делом я спрошу "Какой [censored] забыл создать уникальный индекс?". А потом просто посчитаю COUNT(DISTINCT CONCAT(pp.property_name,CHAR(0),pp.property_value)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.09.2017, 19:43
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
Akina, но твоей запрос ещё и хуже по производительности. мой может на раннем этапе уже отсечь много записей по первому фильтру, затем применять остальные. Твой будет жестоко агрегировать все записи в таблице... если твой примерять, надо Хотя Бы вынести один из фильтров в WHERE... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.09.2017, 19:45
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
MasterZivAkina, но твоей запрос ещё и хуже по производительности. мой может на раннем этапе уже отсечь много записей по первому фильтру, затем применять остальные. Твой будет жестоко агрегировать все записи в таблице... если твой примерять, надо Хотя Бы вынести один из фильтров в WHERE... не, я неправ, твой тоже может оптимизироваться... но все равно не нравится он мне! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.09.2017, 08:55
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
MasterZiv, Зато красиво. И без exists (select...) (который, к стыду еще плохо понимаю). А что если вторую таблицу жойнить дважды, а потом запускать отбор? Distinct, кстати, решает проблему дублей характеристик. Как у такого запроса с производительностью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.09.2017, 09:10
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
paverА что если вторую таблицу жойнить дважды При фиксированном количестве фильтров это обычная практика: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. При нефиксированном - можно использовать динамическую "подгрузку" пакета условий на стороне клиента или в хранимой процедуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.09.2017, 11:53
|
|||
|---|---|---|---|
|
|||
Прошу помочь сделать выборку |
|||
|
#18+
AkinaПри нефиксированном ... Ага, не подумал. Точнее, уже забыл, что в условии - "по нескольким значениям свойств" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.09.2017, 13:06
|
|||
|---|---|---|---|
Прошу помочь сделать выборку |
|||
|
#18+
paverMasterZiv, Зато красиво. И без exists (select...) (который, к стыду еще плохо понимаю). А что если вторую таблицу жойнить дважды, а потом запускать отбор? Distinct, кстати, решает проблему дублей характеристик. Как у такого запроса с производительностью? Да там примерно одинаково хреново с производительностью... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&tablet=1&tid=1830441]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 9ms |
| total: | 144ms |

| 0 / 0 |
