php写的mysql查询30分钟内的文章命令应该怎么写呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php写的mysql查询30分钟内的文章命令应该怎么写呢?相关的知识,希望对你有一定的参考价值。

我建立了一个表 里边有个字段是shijian,这个字段存储的是这篇文章到期的时间,所以他的值是过去 或者未来的一个时间值,我想查询下30分钟内到期的文章应该怎么写呢?

要是查询当天的呢,又应该怎么写呢,我找了好多资料都不行哦,快来帮帮我吧,仅有的50分送上。

首先看shijian是什么字段类型,如果是timestamp,则:
$sql = "select * from table_news where UNIX_TIMESTAMP(shijian) - UNIX_TIMESTAMP() < 1800";

而UXIN_TIMESTAMP(shijian)是shijian的timestamp
其中UNIX_TIMESTAMP()是当前时间的timestamp
两个数做减法,能算出还有多少秒到期,如果这个秒数小于1800(30分钟),就是30分钟内到期了。

补充:呵呵楼下你写的是SQL Server的语法,而不是mysql
参考技术A 首先得看你shijian这个字段里面存的是时间戳还是字符串了
如果是时间戳就直接用当前时间加上30分钟就OK了
$now = time();
$time = time()+1800;
$sql = "SELECT * FROM table WHERE shijian > '$now' AND shijian < '$time'";
这个是30分钟内到期的
查询当天的也一样
大致就是算出今天第一秒和最后一秒的范围,但后去数据库里筛选
$string_time = date("Y-m-d", time());//返回今天的日期2009-11-5
$start_time = strtotime($string_time);//返回2009年11月5日0点0分0秒时间戳
$end_time = $start_time + 86400;//86400是24小时的秒数
$sql = "SELECT * FROM table WHERE shijian > '$start_time' AND shijian < '$end_time'";
这条语句就是查询当天的

以上是shijian字段存进时间戳的情况,如果是存的日期格式的字符串,可以用strtotime转换为时间戳,然后方法跟上面一样了

方法就是这样了,得自己尝试,注意,记得设置时区,不然,会相差八小时
date_default_timezone_set('PRC');
这样就很准确了
希望能帮到你!
参考技术B 假设你的表里的时间字段是时间戳类型,名字为 cometime

$time = strtotime(date("Y-m-d H:i:s"));
$time1 = strtotime(date("Y-m-d H:i:s",strtotime("+30 minute")));
$time2 = strtotime(date("Y-m-d H:i:s",strtotime("+1 day")));

$sql1 = "select * from tablename where shijian<".$time1." and shijian>".$time;//查询从现在开始30分钟后到期文章的sql语句
$sql2 = "select * from tablename where shijian<".$time2." and shijian>".$time;//查询从现在开始一天内到期的文章的sql语句
参考技术C 标准答案:
30分钟内到期
select * from 表 where ABS(datediff(minute,shijian,getdate())<=30)

今天到期
select * from 表 where CONVERT(varchar(20), shijian, 110) =CONVERT(varchar(20), getdate(), 110)

获取多个小时内按分钟时间范围内的 mySQL 行

【中文标题】获取多个小时内按分钟时间范围内的 mySQL 行【英文标题】:Get mySQL rows in minute-by-minute time range over multiple hours 【发布时间】:2011-06-28 19:37:48 【问题描述】:

我可以尝试通过 PHP 执行此操作,但我认为它可以简单地在 mySQL 中完成。我在 mySQL 中有日期时间超过多个小时的行。我想在这几个小时内返回每分钟间隔的计数。

GROUP BY MINUTE(date)

给了我 60 行,但它没有给我 01:00:00 - 01:01:00 与 02:00:00 和 02:00:01 不同的计数。

如何做到这一点?

【问题讨论】:

日期本身呢?您想将星期日的分钟数和星期一的分钟数组合在一起吗? 【参考方案1】:

对于那些搜索相同结果但使用 UNIX 时间(从 1970-01-01 开始的秒数)的人,您可以使用:

SELECT
    FROM_UNIXTIME(`unix_time`, '%Y-%m-%d %H:%i') as minute,
    COUNT(id) as number_total
FROM my_table
GROUP BY minute

更多日期功能>https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

【讨论】:

【参考方案2】:

旧问题的新答案!

要按分钟分组,您可以:

SELECT (unix_timestamp(`date`) - unix_timestamp(`date`)%60) groupTime, count(*) 
FROM yourTable
# WHERE clause
GROUP BY groupTime

使用此解决方案,您将永远不会将一分钟的日期时间与另一小时、一天、...的同一分钟的日期时间混合在一起......

另外,这是一个不断发展的解决方案,因为通过将“60”更改为另一个数字,您可以按几分钟 (120)、一天 (86400) 分组...

【讨论】:

此解决方案的一个主要附带好处是,如果您存储时间戳而不是日期,那么您可以删除 unix_timestamp() 部分并仍然按分钟分组 - 太棒了! 真的太棒了!【参考方案3】:

由于 MySql 将日期/时间存储为一个完整的数字,将数字除以 100 将得到分钟:

GROUP BY FLOOR(`data` / 100)

按数字分组比按文本分组更有效。

如果您想按分钟分组而不考虑日期:

GROUP BY FLOOR(`data` / 100) % 10000

【讨论】:

非常满意的回答谢谢!:) 1000 10 分钟 10000 1 小时 20000 2 小时【参考方案4】:

只需使用DATE_FORMAT:

GROUP BY DATE_FORMAT(`date`, '%H:%i')

【讨论】:

谢谢。这对我很有帮助:SELECT DATE_FORMAT(`execute_at`, '%Y-%m-%d %H:%i'), COUNT(*) FROM automations GROUP BY DATE_FORMAT(`execute_at`, '%Y-%m-%d %H:%i') ORDER BY count(*) DESC【参考方案5】:

MySQL 分钟函数实际上是采用分钟数并按此分组。尝试按小时和分钟分组:

GROUP BY HOUR(date), MINUTE(date)

【讨论】:

以上是关于php写的mysql查询30分钟内的文章命令应该怎么写呢?的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver如何查询30分钟内的数据

MySql 选择日期相差 30 分钟的行

我需要使用 cron 作业每 30 分钟恢复一次数据库(mysql)

获取多个小时内按分钟时间范围内的 mySQL 行

02 | 基础篇:到底应该怎么理解“平均负载”?

02 | 基础篇:到底应该怎么理解“平均负载”?