|
Выборка связных таблиц с тегами
|
|||
---|---|---|---|
#18+
Две таблицы: (Relationship) video_id | tag_id ------------------ 1 | 1 1 | 2 2 | 1 (Tags) id | tag_name -------------------- 1 | Action 2 | Strategy Нужно получить выборку video_id из таблицы Relationship где присутствуют оба тега и "Action" и "Strategy". Поэтому video_id = 2 точно не должен быть в выборке. Вобщем делаю такой запрос: select * from relationship a left join tags b on a.tag_id = b.id where b.tag_name in('Action', 'Strategy'); У меня выводятся все три строки что неверно, вобщем то понятно что in предполагает любое из этих тегов, необходимо сделать проверку по AND. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 16:44 |
|
Выборка связных таблиц с тегами
|
|||
---|---|---|---|
#18+
Нашел вот это: Код: plsql 1. 2. 3. 4.
Запрос возвращает пустую выборку ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 19:59 |
|
Выборка связных таблиц с тегами
|
|||
---|---|---|---|
#18+
ambasador, Код: plaintext 1. 2.
а вообщето именно для тегов в силу произвольности набора, [иногда] удобнее пользоваться такими фичами пж как поля--массивы, tags_ids int[] прямо в таблице видео, и соответствующими индексами . подробнее -- к Бартунову и ко. они на индексированиях всякой нерелятивистики собак.. вполне себе корейцы. если теги каждого видео обновляются редко, ессно в противном случае может быть очень больно, почти как у убера ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 22:13 |
|
Выборка связных таблиц с тегами
|
|||
---|---|---|---|
#18+
qwwq, Ну вот вобщем у меня получилось примерно такое: Код: plsql 1. 2. 3. 4.
Здесь видимо "having count(*) = 2" позволяет выводить только сгруппированные по два video_id строки это и будут видео которые и в 'Action' и в 'Strategy' тегах, запрос жестко завязан, но он работает :), вы про эту боль - что при добавлении тега в фильтрацию нужно еще и кол-во счетчика увеличить? А с джойнами у меня так и не получилось реализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 22:58 |
|
Выборка связных таблиц с тегами
|
|||
---|---|---|---|
#18+
ambasador, да, что-то я совсем левое наплёл. надо было стартовать от видео, и т.п. (т.е. выбрать видео, для которых несколько exists ()-ов...) ну да не суть. всё примерно так, как вы написали, но проще не каунты считать, а содержимость ключей в array_agg(tag_id). для этого операторы пересечения/вхождения массивов существует ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 23:16 |
|
Выборка связных таблиц с тегами
|
|||
---|---|---|---|
#18+
ambasadorqwwq, Ну вот вобщем у меня получилось примерно такое: Код: plsql 1. 2. 3. 4.
Подобный вариант: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
qwwqнадо было стартовать от видео, и т.п. (т.е. выбрать видео, для которых несколько exists()-ов...) ну да не суть. А это, наверное, как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
qwwqвсё примерно так, как вы написали, но проще не каунты считать, а содержимость ключей в array_agg(tag_id). для этого операторы пересечения/вхождения массивов существует А это примерно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 23:57 |
|
Выборка связных таблиц с тегами
|
|||
---|---|---|---|
#18+
Спасибо за обилие примеров, подобное как раз не так давно нашел на stackoverflow.com , и эта проблема похоже называется "relational division" ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2017, 05:16 |
|
Выборка связных таблиц с тегами
|
|||
---|---|---|---|
#18+
PgSQLanonymous3 спасибо , добрый человек немного поясню,, что думал я PgSQLanonymous3А это, наверное, как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
qwwqвсё примерно так, как вы написали, но проще не каунты считать, а содержимость ключей в array_agg(tag_id). для этого операторы пересечения/вхождения массивов существует А это примерно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2017, 09:34 |
|
|
start [/forum/topic.php?fid=53&fpage=76&tid=1996608]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 150ms |
0 / 0 |