#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