mysql - Показать список пользователей, отсортированных по времени

0

У меня есть страница, в которой я хотел бы отобразить список пользователей, подписавшихся на оплаченную подписку.

Список должен быть отсортирован согласно 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.

Теги:

2 ответа

0
  • Вам нужно сделать JOIN между двумя таблицами в user_id. Inner Join гарантирует, что учитываются только те пользователи, которые заплатили за подписку.
  • Теперь сделайте простой Order By для сортировки данных на основе времени подписки.
  • Кроме того, вы должны выбрать только определенные поля (в соответствии с требованиями вашего кода приложения) вместо использования подстановочного знака (*). Читайте: Почему 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
0

Exists просто проверка, Exists ли соответствующие записи и возвращает истинный или ложный результат. Если вы хотите заказать поле из другой таблицы, вы должны использовать соединение.

SELECT * FROM user
INNER JOIN paid_subs ON paid_subs.user_id= user.id
ORDER BY paid_subs.subscribed_time DESC

Ещё вопросы

Сообщество Overcoder
Наверх
Меню