Я на самом деле немного новичок в том, как работает SQL - я всегда позволял своей ORM-ручке делать все для меня. Но в этом случае Persistent не раскрывает такую функциональность, поэтому я теряюсь в том, что делать.Esqueleto/raw SQL - Сортировка запроса по результату сортировки в другой таблице?
У меня есть много-ко-многим:
+------------+
| Entries |
+----+-------+
| id | date |
+----+-------+
| 1 | Jan 1 |
+----+-------+
| 2 | Jan 2 |
+----+-------+
| 3 | Jan 3 |
+----+-------+
+------------+
| Tags |
+------------+
| id | label |
+----+-------+
| 1 | Apple |
+----+-------+
| 2 | Boat |
+----+-------+
| 3 | Car |
+----+-------+
+-------------------+
| EntryTags |
+----------+--------+
| entry_id | tag_id |
+----------+--------+
| 1 | 1 |
+----------+--------+
| 1 | 2 |
+----------+--------+
| 2 | 2 |
+----------+--------+
| 3 | 3 |
+----------+--------+
И я хочу, чтобы отсортировать теги в первую очередь по дате их последней записи (по убыванию), во вторую очередь их метки (по возрастанию).
Тег Car
последняя запись от 3 января, поэтому он идет первым. Тег Apple
самая последняя запись - 2 января, но также есть тег Boat
. Тем не менее, метка Apple
приходит перед меткой Boat
по алфавиту, так Apple
является второй и Boat
является третьим:
returns:
1. Tag w/ id 3
2. Tag w/ id 1
3. Tag w/ id 2
Через моих исследований я понял, что мне нужна какая-то комбинация объединений, чтобы сделать это. Однако до сих пор я нашел только ссылки для отношений «один ко многим» (сортировка тем в потоке по их последнему сообщению), и я думаю, что я их понимаю, но ни один из них не связан с этими трехсторонними объединениями для многих-ко-многим связи.
Я включаю исходный sql как возможный ответ, потому что я думаю, что я просто прошу использовать sql-способ сделать это, и хотя я использую Esqueleto для своих привязок SQL, я думаю, что как только я пойму SQL, перевод на Esqueleto будет прост. Я использую postgresql в качестве моего бэкэнд, но я бы предпочел не использовать специфичные для постгрейса вещи, потому что мои привязки для общих бэкэндов.
У кого-нибудь есть идеи, где я могу начать? С какими соединениями я должен смотреть и как я могу сортировать самую последнюю запись?
Он работает, если идентификатор тега не нужен, что неясно из вопроса. –
Обновлено, чтобы включить идентификатор тега. Я согласен, что желаемый результат не совсем ясен в вопросе. @justin, пожалуйста, уточните, если это не тот результат, который вам нужен. – MothOnMars
достаточно, мне просто нужен способ ссылки на строку в некоторой форме или форме. Я просто не был уверен, как сортировать. Благодаря :) –