Хорошо, поэтому есть две модели - Event и Like. Модель события имеет поле «бизнес», которое ссылается на определенный бизнес-объект, в котором также есть поле «менеджер». Кроме того, в модели событий есть поле «когда», которое описывает дату возникновения события.
С другой стороны, как у модели есть поле «событие», которое ссылается на определенный объект Event, а также поля «person» и «date», которые описывают, кто дал, и когда это было дано этому событию.Комплекс условного упорядочения по запросу
Цель состоит в том, чтобы отображать на странице пользователя все понравившиеся события целевым пользователем и все события, которыми управляет этот пользователь. Это может быть просто сделать с помощью этой команды SQL:
SELECT event.*
FROM event INNER JOIN
business
ON (event.business_id = business.id)
WHERE ((event.id IN (SELECT event_id FROM 'like' WHERE person_id = 1)) OR business.manager_id = 1);
Но, приходит проблему, когда, что результаты должны быть отсортированы, по уже упоминались «дата» в Like и «когда» в Событии модели. Поведение сортировки должно быть следующим: если объект Event происходит из объекта Like, он должен быть отсортирован по «дате» в этом объекте Like, в другом случае он должен быть отсортирован по «когда» в событии.
Я думаю, что этот запрос был бы более сложным после того, как в него будет вставлена сортировка, и кто-нибудь знает правильное решение? Я полагаю, что необходимо использовать команду CASE WHEN
или эквивалентную команду annotate
в Django ORM, но я понятия не имею, как именно.
P.S. Я не против, если он написан в чистом SQL или в Django ORM, если он решает проблему. Заранее спасибо!
Примеры данных и желаемые результаты помогут объяснить, что вы хотите сделать. –
Я думаю, что это довольно просто понять, потому что то, что я делаю, это подготовка данных, которые будут отображаться на странице пользователя, где смешаны все события, которые понравились пользователю другим, которые он создал. И у меня есть проблема с сортировкой их по дате (например, модели) и дате «когда» в модели событий. – MikiSoft
@MikiSoft Это всегда проще для человека, который знает, чего он хочет, но у большинства из нас есть более легкое понимание времени, чем описание данных. Что касается вашей проблемы, вы должны добавить в свой запрос 'JOIN' (или' LEFT JOIN') для таблицы 'like' вместо использования' event.id IN() ', потому что это даст вам доступ к необходимым полям для сортировки ... что-то вроде: 'ORDER BY CASE WHEN like.person_id IS NULL THEN event.date ELSE like.date END' –