|
|
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Этим запросом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. хочу извлечь из базы список чатов, чтобы небыло дубликатов по ID. Обязательное условие - сортировка по полю last_msg. Для этого сделал подзапрос. Извлекаю по 5 записей. На 2й странице ID чата встречается второй раз. Уже который час ломаю голову, почему так происходит. Ведь если извлечь все записи, то дубликатов нету. Соответственно, в подзапросе все впорядке. В основном запросе только ORDER BY и LIMIT, но с ними тоже вроде бы все правильно. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:07 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Random2, покажите explain запроса... на вскидку попробуйте добавить внутрь подзапроса OFFSET 0 может помочь. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:16 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Random2На 2й странице ID чата встречается второй раз.по запросу не понять, уникально ли last_msg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:22 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Результаты Explain: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. OFFSET 0 внутри подзапроса не помог. Результат совсем никак не изменился. p2. , last_msg (int8) - UNIX TIMESTAMP, соответственно, может быть не уникальным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:39 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Результаты вывода основного запроса без разбиения на страницы: Результаты вывода запроса с разбиением на страницы по 5: Как видно, на 2й странице дублируется chat_id=71. Заметил одну вещь - если в основном запросе после "ORDER BY last_msg DESC" добавить "chat_id", то дубликат пропадает. Но не пойму, почему. А в предыдущем варианте, где есть дубликаты, одного chat_id (104) не хватает, вместо него дубликат (71). Хотелось бы разобраться, почему так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:48 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Random2, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:48 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
isdenno, спасибо за Ваш ответ, но обязательное условие - сортировка в результатах по last_msg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:52 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Random2, так порядок вывода равных строк при ORDER BY по строке он в общем неспецифицирован вообще. Т.е. строки с last_msg NULL вообще можно считать что при order by last_msg располагаются как хотят и порядок между запросами может менятся вот он у вас и меняется, отсюда и дубликаты. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:52 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Random2, тогда chats.last_msg desc, chats. ID, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:57 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, тогда достаточно добавить в основной запрос какую-нибудь еще сортировку по полю, которое не может быть пустым (например по chat_id, как я написал в последнем сообщении). Получается, это решит проблему, правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 15:59 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
Random2Maxim Boguk, тогда достаточно добавить в основной запрос какую-нибудь еще сортировку по полю, которое не может быть пустым (например по chat_id, как я написал в последнем сообщении). Получается, это решит проблему, правильно? Которое будет НЕ ТОЛЬКО не пустым но и уникальным по сочетанию полей указанных в order by. Вариант по chat_id вполне рабочий с этой точки зрения, но я бы у заказчика бы поинтересовался на счет того какую именно он хочет сортировку при равных last_msg. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 16:10 |
|
||
|
DISTINCT-ORDER BY и дубликаты
|
|||
|---|---|---|---|
|
#18+
isdenno, так то работает. Но интересна причина. Наверное, как написал Maxim Boguk, причина в том, что нужно указывать сортировку дополнительно для не-нулевого поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 16:10 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=107&tid=1997842]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 333ms |

| 0 / 0 |
