|
|
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
Всех с Новым Годом! :) Помогите плиз сделать запрос. Есть такая таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Нужно сделать запрос и выдать только те thread_id в которых есть все запрашиваемые user_id. Например по таблице выше запрашиваю user_id=2,3 должно выдать thread_id=3,11 Помогите плиз :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2016, 00:29 |
|
||
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
Нашел такое решение: Код: sql 1. 2. 3. 4. 5. 6. Работает! Может кто что скажет еще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2016, 01:44 |
|
||
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
Closius, Реляционное деление. Мне вот это пояснение нравиться. И я предпочитаю вариант с двойным отрицанием (он универсален — не надо подставлять кол-во элементов в IN выражении): Код: plaintext Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Тут получается, что: `s1` — делимое `s2` — делитель, в данном случае та же таблица с заданным условием `s3` — связка между ними. Самый нижний подзапрос вернет записи, которые удовлетворяют условию. Соответственно, подзапрос второго уровня их исключит и оставит такие, которые неверны. Ну и на самом верхнем уровне остаются только искомые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2016, 02:08 |
|
||
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
vyegorov, вкусовщина -- страшная сила допустим, каждый усер принял участие менее чем в 1/10000 тредов. и, допустим, мы ищем по подмножеству менее чем 1/10000 усеров тогда where стартера эффективно обрежет по индексу что-- то заведомо ~<1/1000 а где будет ваш not EXISTS по фуллскану ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2016, 09:58 |
|
||
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
vyegorov, У вас же два подзапроса, прчем подзапрос в подзапросе.. Думаю стоимость будет выше моего варианта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2016, 12:07 |
|
||
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
Кстати я что еще понял, мне нужно также вывести общее кол-во user_id которые имеют одинаковый thread_id Решил это так: Код: sql 1. 2. 3. 4. 5. 6. То есть сейчас выведет Код: sql 1. 2. 3. 4. Но запрос значительно усложнился... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2016, 12:25 |
|
||
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
Только теперь другая проблема: participants получается псевдотипом record... Как его в int преобразовать или сделать так чтобы он не кастовался в рекорд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2016, 13:22 |
|
||
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
получилось: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2016, 13:27 |
|
||
|
Не понимаю как сделать запрос
|
|||
|---|---|---|---|
|
#18+
Closiusобщее кол-во user_id которые имеют одинаковый thread_idубрать в первом запросе where и добавить left join на список требуемых id и проверять count по user_id. или переписать having на условный count filter по user_id in ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2016, 14:48 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39141350&tid=1997539]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 507ms |

| 0 / 0 |
