2015-05-28 3 views
-2

Я бы спросил, что является лучшим и самым мощным способом извлечения данных из двух таблиц mysql на основе определенных фильтров, и если результат равен нулю, извлеките данные без каких-либо условий?Самый мощный способ выбрать данные 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 часов дня 05/28/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

+1

Определить мощный? – Epodax

+0

Лучшая производительность –

+0

Если вы предоставляете некоторые варианты, мы можем сказать вам, что лучше. В качестве альтернативы, если вы просто хотите решить проблему, рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, укажите надлежащие DDL (и/или sqlfiddle), чтобы мы могли более легко повторить проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. – Strawberry

ответ

-1
$hours = 3; 


$query = mysql_query("SELECT * FROM user, access 
    WHERE access.iduser = user.id 
    AND < DATE_SUB(NOW(), INTERVAL '$hours' HOUR) LIMIT 3"); 

если вы не получите никаких результатов, увеличивайте количество часов на один каждый раз и повторите запрос до тех пор, пока не получите результаты.

Смежные вопросы