Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我需要不寻常的结果_Php_Mysql - Fatal编程技术网

Php 我需要不寻常的结果

Php 我需要不寻常的结果,php,mysql,Php,Mysql,我正在尝试从当前日期开始按升序排列结果 这就是我现在使用的 SELECT * FROM friends JOIN bdays ON bdays.user = friends.friendname WHERE username = $userid ORDER BY DATE_FORMAT(date, '%m %d') 有什么想法吗 示例 现在按日期排序,从1月份开始对生日进行排序 我需要的不是从一月开始,而是从当前日期开始 所以,不是, January February March Apri

我正在尝试从当前日期开始按升序排列结果

这就是我现在使用的

SELECT * FROM friends JOIN bdays 
ON bdays.user = friends.friendname 
WHERE username = $userid ORDER BY DATE_FORMAT(date, '%m %d')
有什么想法吗

示例 现在按日期排序,从1月份开始对生日进行排序

我需要的不是从一月开始,而是从当前日期开始

所以,不是,

January
February
March
April
May
June
July
August
September
November
December
它会这样命令他们

April (current month/day)
May
June
July
August
September
November
December
January
February
March
April (all the way up to yesterday)
类似于按if排序(日期格式(日期,'%m%d')<日期格式(现在(),'%m%d')),1,0),日期格式(日期,'%m%d')

您可以尝试:

SELECT *, DATE_FORMAT(date, '%m %d') as adate FROM friends JOIN bdays 
ON bdays.user = friends.friendname 
WHERE username = $userid 
ORDER BY adate
我是这样做的:

SELECT *, (DATE_FORMAT(date, '%j')-DATE_FORMAT(NOW(), '%j')+365)%365 AS d 
FROM foo ORDER BY d;
%j
日期格式是一年中的某一天,即数字001…366

我在一些样本数据上对此进行了测试,它按照您描述的方式进行排序:它忽略年份,并首先对当前日期之后的下一个日期进行排序,然后升序,最后换行到今年早些时候的日期

+----+------------+------+
| id | date       | d    |
+----+------------+------+
|  5 | 1999-05-15 |   27 |
|  6 | 1992-06-15 |   59 |
|  7 | 1990-07-15 |   88 |
|  8 | 1988-08-15 |  120 |
|  9 | 1980-11-15 |  212 |
|  1 | 2010-01-15 |  272 |
|  2 | 2009-02-15 |  303 |
|  3 | 2004-03-15 |  332 |
|  4 | 2002-04-15 |  362 |
+----+------------+------+
你可以试试:

ORDER BY
   DATE_FORMAT(date,'%m %d') < DATE_FORMAT(NOW(),"%m %d"),
   DATE_FORMAT(date,'%m %d');
orderby
日期格式(日期,“%m%d”)<日期格式(现在(),“%m%d”),
日期格式(日期,“%m%d”);
首先,按日期是否小于当前日期排序,然后按月份和日期升序排序

注意
这看起来像是子母弹上校所指的方法。

为什么要格式化它?为什么不只是“按日期排序”?在我的具体情况下,年份没有用,这些是生日,所以年份不重要。这应该行得通。日期字段的格式是什么?YYYY-MM-DD格式,mysql-datetime格式您不会说它是如何工作的。你能举一个例子,说明一些行没有按你期望的方式排序吗?如果您显示查询的结果是什么,以及它与您期望的结果有多大的不同,这将很有帮助。