现有一张用户数据表 user_table
里面有个 birthday
字段存放用户出生日期(如 1994-01-01、1996-07-1
)对应的时间戳数据
现在需要按照生日从近到远的排序来分页查找用户数据
比如今天 2016-07-28
的话,生日日期分别为 1995-07-30
、1993-11-31
、1997-08-29
、1995-07-27
的四个用户数据排序后就是 1995-07-30
、1997-08-29
、1993-11-31
、1995-07-27
SQL 语句怎么写才能满足这样的查询条件?
或者说我这存放生日的数据表结构应该修改成怎样才合适?
回复内容:
现有一张用户数据表 user_table
里面有个 birthday
字段存放用户出生日期(如 1994-01-01、1996-07-1
)对应的时间戳数据
现在需要按照生日从近到远的排序来分页查找用户数据
比如今天 2016-07-28
的话,生日日期分别为 1995-07-30
、1993-11-31
、1997-08-29
、1995-07-27
的四个用户数据排序后就是 1995-07-30
、1997-08-29
、1993-11-31
、1995-07-27
SQL 语句怎么写才能满足这样的查询条件?
或者说我这存放生日的数据表结构应该修改成怎样才合适?
不考虑数据量和性能问题的简单做法:
加一个字段, 保存dayofyear的信息, 比如说这个字段名就叫day_of_year, 那么你插入语句是这样的:
insert into user_table set ... = ..., day_of_year = DAYOFYEAR('1995-07-30');
查询的时候查询两次, 首先是查询 day_of_year 字段大于你的当前值的, 然后查询这个字段小于当前值的, 按 day_of_year 排序:
select * from user_table where day_of_year >= DAYOFYEAR(CURDATE()) order by day_of_year asc; select * from user_table where day_of_year < DAYOFYEAR(CURDATE()) order by day_of_year asc;
先前少看一个条件
mysql 把时间 1995-07-30 ,先转换成一年中的第几天 DAYOFYEAR('1995-07-30'),减去今天是一年中的第几天,得到一个差值然后order by 一下就行。
如果生日的月日一样,可以再按年递增排序。
<code>select * from user_table order by (DAYOFYEAR(birthday)-DAYOFYEAR(curdate())),year(birthday) ASC</code>
思路:你这个其实就是先按相减之后的月排,排完之后再按相减之后的日排
<code>mysql> SELECT name, birthday FROM user_table -> WHERE MONTH(birthday) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)) -> ORDER BY DAY(birthday) asc; </code>
上面这个代码可以实现获取当前月份之后1个月的生日数据并按照日升序排列,你再写个repeat把后面的取出来就好了
<code>DROP TEMPORARY TABLE IF EXISTS aa; DROP TEMPORARY TABLE IF EXISTS bb; create temporary table aa(select birthday from user_table WHERE substring(birthday,6,10)>'07-28' ORDER BY substring(birthday,6,10) asc); create temporary table bb(select birthday from user_table WHERE substring(birthday,6,10)</code>
1995-07-30
1997-08-29
1993-11-31
1999-01-01
1995-07-27

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 英文版
推荐:为Win版本,支持代码提示!