Мне нужно написать запрос, который, как мне кажется, потребует в нем подзапроса. В настоящее время я пишу запрос как необработанный оператор SQL с использованием DataGrip, и мне нужно будет работать на сервере postGres. Я использую Laravel, чтобы написать приложение, в котором этот запрос должен работать.
Две таблицы, необходимые для записи запроса: media_files и статусы . Между двумя таблицами существует связь: media_files.id = statuses.model_id
Файлы хранятся в media_files и могут иметь два статуса: в ожидании и * 1013. * прикреплен. Статусы файлов хранятся в статусах . Таблица статусов может также содержать статусы других вещей, таких как задачи, события, пользователи и т. Д. c.
Мне нужен способ получить все файлы, где последний статус для них в ожидании. Некоторые файлы могут даже не иметь статуса в ожидании , и их можно игнорировать.
Таблица статусов может содержать несколько статусов одного и того же файла мультимедиа. Так, например, у вас может быть:
Запись 1
media_files.id = 1
media_files.name = 'CV document'
statuses.id = 2
statuses.model_id = 1
statuses.model_type = 'App \ MediaFile'
statuses.name = 'connected'
statuses.created_at = '2020-06-16 17: 39: 08'
Запись 2
media_files.id = 1
media_files.name = 'CV document'
statuses.id = 1
statuses.model_id = 1
statuses.model_type = 'App \ MediaFile'
statuses.name = 'pending'
statuses.created_at = '2020-06-14 17: 30: 00'
Я сделал начало запроса, но похоже, что он работает некорректно:
select media_files.*, (
select name
from statuses
where model_id = media_files.id
and model_type = 'App\File'
order by statuses.created_at desc
limit 1
)
as latest_status
from media_files
inner join statuses on statuses.model_id = media_files.id
where statuses.model_type = 'App\Entities\Media\File'
order by media_files.id desc;