|
|
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
Добрый день. Помогите плиз новичку.. Есть табица User у нее есть поле inter, которое сязано отношением многое ко многим с таблицей Interest Есть список интересов: 1,7,3 1) как сделать запрос на возвращение всех юзеров у которых обязательно есть inter=1,7,3 ? 2) как сделать запрос всех юзеров у которых есть хотя бы одно значение из листа? С уважением, Антон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2015, 22:45 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
ClosiusЕсть табица User у нее есть поле inter, которое сязано отношением многое ко многим с таблицей Interestddl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2015, 23:17 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
Closius, Задача реляционного деления. На SQL традиционно решается через [NOT]EXISTS-подзапросы или через группировку с постфильтрацией (GROUP BY + HAVING) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 08:35 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, А можете дать ссылку где про это почитать или пример запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 11:31 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, И подзапросы вы имеете в виду вложенные запросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 11:31 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
Closius, Все оказалось довольно просто (user_inter - промежуточная таблица для many_to_many): SELECT DISTINCT user_id FROM user_inter WHERE inter_id = ANY(array[1,7,3]); Но это работает для случае 2. А вот для случая 1 наверно только вложенные запросы.. Типа в первом выбираем всех у кого есть 1, во втором всех у кого есть 7 и в третьем у кого есть 3. Каждый запрос фильтрует предыдущий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 16:00 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
ClosiusClosius, <> А вот для случая 1 наверно только вложенные запросы.. Типа в первом выбираем всех у кого есть 1, во втором всех у кого есть 7 и в третьем у кого есть 3. Каждый запрос фильтрует предыдущий.it depends. в некоторых случаях можно таки через aggregate и having. вернее -- можно всегда, но при некоторой плотности интересов и их многообразии оно даже и проще. универсально (не по скорости) ~ Код: sql 1. 2. или Код: sql 1. 2. в случае, если интересов много и они редки -- дешевле через набор EXISTS-ов. хотя и генерировать скл придётся всякий раз. Или хранимочкой с циклом и статикой. (в т.ч. и WITH RECURSIVE по unnest(array_param), думается, можно нарисовать) ещё можно вместо реляционных интересов хранить их в array -- поле. И таки да -- индексировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 16:24 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
Closius, Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 17:23 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
ursido, count(DISTINCT inter_id) = 3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 18:19 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
vyegorovursido, count(DISTINCT inter_id) = 3 в таблице связей обычно пк по паре id. т.ч. "скрипач не нужен" Или, если связь -- отдельная осмысленная сущность со своими отдельными от id связуемых заморочками -- хотя бы unique. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 18:25 |
|
||
|
Запрос нескольких значений многое ко многим
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы! Думаю стоит попробовать разные варианты ) qwwqещё можно вместо реляционных интересов хранить их в array -- поле. И таки да -- индексировать. И как целостность поддерживать? Тригерами? Не этот вариант мне не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 19:07 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39069758&tid=1997728]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
436ms |
get topic data: |
7ms |
get forum data: |
7ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 266ms |
| total: | 774ms |

| 0 / 0 |
