Я ищу решение простой проблемы. Я разработал MySQL, и у меня все еще есть проблемы здесь и с AQL. Я хочу отображать комментарии пользователя с разбивкой на страницы без повторяющихся ключей статей. У меня есть коллекция комментариев с
_key, user_key, content_key, comment, stamp_create
Пример:
1, 4483, 200, "reply 1", "2021-04-24T14:55:55+00:00"
2, 4483, 200, "reply 2", "2021-04-24T14:56:23+00:00"
3, 4483, 201, "reply 1", "2021-04-23T17:10:15+00:00"
4, 4483, 202, "reply 1", "2021-04-23T12:30:35+00:00"
5, 4483 , 202, "reply 2", "2021-04-22T23:50:51+00:00"
Теперь мне нужен вывод всех комментариев, отсортированных по stamp_create DESC, но с суммированным content_key, с Mysql для этого было достаточно Group By. Поэтому я пробую это с помощью Collect.
FOR c IN comments FILTER c.user_key =="4483" SORT c stamp_create DESC COLLECT contentKeys = c.content_key RETURN contentKeys LIMIT 0,3
Обычно результат правильный, но сортировка не работает, потому что COLLECT его не запоминает. Ну тогда со старым добрым DISTINCT:
FOR c IN comments FILTER c.user_key =="4483" SORT c stamp_create DESC RETURN DISTINCT contentKeys LIMIT 0,3
Результат выглядит хорошо и сортировка правильная, но я получаю только 2 результата, а не 3, как указано в Limit. Для страницы, к сожалению, бесполезно, потому что я получаю более или менее результаты (MySQL делает это иначе с Group By).
Теперь попробуйте, приложив немного больше усилий:
FOR c IN comments
FILTER c.user_key =="4483"
COLLECT contentKeys = c.content_key INTO groups
LET keys = first(FOR value IN groups[*].c SORT value.stamp_create DESC RETURN {key: value._key, stamp: value.stamp_create})
SORT keys.stamp DESC
LIMIT 0,3
RETURN keys
Я загружаю сюда все комментарии, сгруппированные в группы, затем сортирую их внутри группы по, а затем снова в целом.
Результат правильный, и я также получил 3 результата. Большой недостаток в том, что это не очень быстро, и у меня много пользователей с более чем 60 тысячами комментариев.
Весь (отфильтрованный) набор данных (также может быть длиной 60 КБ) должен быть считан, а затем повторно отсортирован. Это должно быть проще.
Итак, мой вопрос: есть ли эффективный способ сделать это быстрее и проще?
Благодарность