Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос с выборкой из множеств значений
|
|||
|---|---|---|---|
|
#18+
Есть таблицы 1. filter_table items_id | value 1 | 10 1 | 5 2 | 6 2 | 8 2. user_data_table items_id | value | user_id 1 | 10 | 1 2 | 6 | 1 1 | 5 | 2 2 | 8 | 2 1 | 7 | 3 2 | 4 | 3 Нужно получить user_data_table.user_id у которых user_data_table.items_id = 1 AND user_data_table.value in [10,5] AND user_data_table.items_id = 2 AND user_data_table.value in [6,8] Чтоб в итоге получилось user_id | 1 | 2 | Таблица filter_table динамичная, т.е там могжет быть любое количество полей с разными items_id Как составить такой запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 10:27 |
|
||
|
Запрос с выборкой из множеств значений
|
|||
|---|---|---|---|
|
#18+
ldarТаблица filter_table динамичная, т.е там могжет быть любое количество полей с разными items_idВот это - как понимать? ldarНужно получить user_data_table.user_id у которых user_data_table.items_id = 1 AND user_data_table.value in [10,5] AND user_data_table.items_id = 2 AND user_data_table.value in [6,8] Отбор по указанным условиям, а потом группировка по user_id и проверка, что COUNT(items_id, user_id) равно 2. Надеюсь, на комбинацию (items_id, user_id) наложено требование уникальности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 10:31 |
|
||
|
Запрос с выборкой из множеств значений
|
|||
|---|---|---|---|
|
#18+
AkinaldarТаблица filter_table динамичная, т.е там могжет быть любое количество полей с разными items_idВот это - как понимать? Сорри, не полей, а зписей AkinaldarНужно получить user_data_table.user_id у которых user_data_table.items_id = 1 AND user_data_table.value in [10,5] AND user_data_table.items_id = 2 AND user_data_table.value in [6,8] Отбор по указанным условиям, а потом группировка по user_id и проверка, что COUNT(items_id, user_id) равно 2. Надеюсь, на комбинацию (items_id, user_id) наложено требование уникальности? Да, комбинация уникальна. А можно пример, если возможно? Я просто не понимаю, каким образом это все сделать одним запросом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 11:03 |
|
||
|
Запрос с выборкой из множеств значений
|
|||
|---|---|---|---|
|
#18+
AkinaОтбор по указанным условиям WHERE Akinaгруппировка по user_id GROUP BY Akinaпроверка, что HAVING ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 11:29 |
|
||
|
Запрос с выборкой из множеств значений
|
|||
|---|---|---|---|
|
#18+
Akina, Это я понял. Вот такое чудо получилось Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Только тяжелый получился, можно ли как нибудь оптимизировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 12:14 |
|
||
|
Запрос с выборкой из множеств значений
|
|||
|---|---|---|---|
|
#18+
Просто в моем запросе получается, что по INNIER JOIN вытягиваются много лишних данных, которые равны или одному items_id или другому а их около 7000 из за этого тормоза, а по HAVING только фильтруются те что нужны их около 500. Есть ли другой метод обработки, без HAVING? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 13:10 |
|
||
|
Запрос с выборкой из множеств значений
|
|||
|---|---|---|---|
|
#18+
ldarможно ли как нибудь оптимизировать? udi.items_id используется в условии связывания, так что по логике он не должен быть ни 0, ни NULL, следовательно, ему в условии функции IF() делать нечего. То же и по udi.user_id, который присутствует в выражении группировки. Т.е. получается, что условие в IF() всегда истинно, и значение всегда 1, а потому SUM() вообще можно заменить на COUNT(). А раз само значение этого выражение тебе не нужно, ибо используется исключительно в HAVING - то его следует убрать из выходного набора и записывать непосредственно в HAVING. Т.е. получится Код: sql 1. 2. 3. 4. 5. 6. 7. А разогнать запрос можно наличием подходящих индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 13:28 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=47&tid=1830875]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 364ms |
| total: | 494ms |

| 0 / 0 |
