Я хотел бы спросить, что является лучшим и наиболее эффективным способом извлечения данных из двух таблиц MySQL на основе определенных фильтров и, если результат нулевой, извлекать данные без условий?
table user
ID NAME SURNAME
1 nick smith
2 john davis
3 mattew miller
4 roger wilson
5 karl taylor
6 july moore
7 michael white
8 genny lopez
table access
ID IDUSER LASTACCESS
1 1 2015-05-27 08:10:15
2 5 2015-05-27 08:25:23
3 4 2015-05-27 09:15:24
4 7 2015-05-27 09:28:24
5 7 2015-05-27 23:02:05
6 1 2015-05-28 01:10:55
7 2 2015-05-28 02:11:20
8 3 2015-05-28 04:15:49
предполагая, что сейчас 10:00 утра дня 28.05.2015, я хотел бы извлечь доступы, произошедшие между сейчас и три часа назад, и если результат равен нулю (и он есть), я хотел бы, чтобы запрос возвращал последний несколько 3 доступа в порядке убывания даты. Спасибо
============================= ОБНОВЛЕНИЕ ==================== ============
Я пытаюсь это:
SELECT * FROM access
WHERE access.iduser = user.id
AND < DATE_SUB(NOW(), INTERVAL 3 HOUR)
OR user.id = ANY ( SELECT * FROM access ORDER BY lastaccess DESC )
GROUP BY user.id ORDER BY lastaccess DESC
Я бы получил результат непосредственно из MySQL без использования PHP
$hours = 3;
$query = mysql_query("SELECT * FROM user, access
WHERE access.iduser = user.id
AND < DATE_SUB(NOW(), INTERVAL '$hours' HOUR) LIMIT 3");
если вы не получите результатов, увеличивайте $ часов на единицу каждый раз и повторяйте запрос, пока не получите результаты.
Других решений пока нет …