сортировка сведений по идентификатору пользователя из другой таблицы mysql по активности менее 3600

#mysql #sql #pdo

#mysql #sql #pdo

Вопрос:

Я хочу получить всех пользователей из таблицы «участники», но также проверить, существуют ли идентификаторы member_id из таблицы members и user_id в таблице «login», а затем посмотреть, есть ли столбец «activity» (current_timestamp) меньше 3600 секунд в таблице login, чем упорядочить этих пользователей в списке top rest пользователи, если они не существуют в таблице login.таблица входа показывает этих пользователей внизу?

как я могу запросить это, пожалуйста.

вот как я выбираю пользователей

 $query = "SELECT * FROM members WHERE member_id != '".$_SESSION['member_id']."'";
 

но теперь, как мне запросить остальные?

действительно спасибо за вашу помощь.

Спасибо

Ответ №1:

Вам нужно что-то вроде

 SELECT members.*
FROM members
JOIN logins ON members.member_id = logins.member_id
WHERE logins.logged_in_at >= CURRENT_TIMESTAMP - INTERVAL 3600 SECOND
-- AND members.member_id != '$_SESSION['tfs_member_id']'
 

JOIN обеспечивает присутствие в logins таблице, ГДЕ logged_in_at фильтрует «активные» логины.

Комментарии:

1. почти работает, но тогда он не показывает всех пользователей из таблицы members. я хочу, чтобы все пользователи также отображали, но отображали тех пользователей сверху, чья активность составляет менее 3600 секунд в таблице входа

2. или я сделал заказ по вместо where, и это сработало ура 🙂

3. @Gracy Переместите условие по активности из WHERE в ORDER BY — как двоичное (активное / неактивное) или числовое (используйте TIMESTAMPDIFF).

Ответ №2:

Используйте a LEFT JOIN с logins таблицей, чтобы получить элементы, которых нет в таблице. Затем проверьте, найден ли пользователь в logins таблице в ORDER BY предложении, и выполните это, упорядочив по тому, является ли последнее действие недавним.

 SELECT m.*
FROM members AS m
LEFT JOIN logins as l ON m.member_id = l.member_id
ORDER BY l.member_id IS NULL,
         l.activity > DATE_SUB(NOW(), INTERVAL 1 HOUR) DESC