У меня есть страница, в которой я хотел бы отобразить список пользователей, подписавшихся на оплаченную подписку.
Список должен быть отсортирован согласно subscribed_time
строке присутствует в другой таблице называется paid_subs
.
Это запрос, который я использую
SELECT *
FROM user
WHERE EXISTS
( SELECT *
FROM paid_subs
WHERE paid_subs.user_id= user.id
ORDER
BY paid_subs.subscribed_time DESC)
То, что делает этот запрос, просто дает мне список пользователей, у которых есть платная подписка.
Я хотел бы, чтобы запрос отображал список платных подписчиков в отсортированном порядке со subscribed_time
.
*
). Читайте: Почему SELECT * считается вредным?Используйте следующий запрос:
SELECT u.* -- please change this to specific fields, eg: u.id, u.name etc
FROM user AS u
INNER JOIN paid_subs ps ON ps.user_id = u.id
ORDER BY ps.subscribed_time DESC
Exists
просто проверка, Exists
ли соответствующие записи и возвращает истинный или ложный результат. Если вы хотите заказать поле из другой таблицы, вы должны использовать соединение.
SELECT * FROM user
INNER JOIN paid_subs ON paid_subs.user_id= user.id
ORDER BY paid_subs.subscribed_time DESC