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

start [/forum/topic.php?fid=47&fpage=68&tid=1830441]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 17ms |
| total: | 153ms |

| 0 / 0 |
