php写的mysql查询30分钟内的文章命令应该怎么写呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php写的mysql查询30分钟内的文章命令应该怎么写呢?相关的知识,希望对你有一定的参考价值。
我建立了一个表 里边有个字段是shijian,这个字段存储的是这篇文章到期的时间,所以他的值是过去 或者未来的一个时间值,我想查询下30分钟内到期的文章应该怎么写呢?
要是查询当天的呢,又应该怎么写呢,我找了好多资料都不行哦,快来帮帮我吧,仅有的50分送上。
$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分钟内的文章命令应该怎么写呢?的主要内容,如果未能解决你的问题,请参考以下文章