【问题标题】:Most powerful way to select MySql data if result is null如果结果为空,则选择 MySql 数据的最强大方法
【发布时间】:2015-05-28 10:40:59
【问题描述】:

我会问什么是基于某些过滤器从两个mysql表中提取数据的最佳和最强大的方法,如果结果为null,则无条件提取数据?

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

假设现在是 2015 年 5 月 28 日上午 10:00,我想提取从现在到三个小时前发生的访问,如果结果为零(并且是)我想要查询按日期降序返回最后 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. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。

标签: php mysql select isnull


【解决方案1】:
$hours = 3;


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

如果没有得到结果,每次将 $hours 加一并重新运行查询,直到得到结果为止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多