我有一个存储(除其他之外)个人出生日期的MySQL表。按截止日期对MySQL表进行排序
是否有任何方法来排序表,以便下一个应有的生日在顶部?
我有日期存储在标准的yyyy-mm-dd日期格式和单独的年,月和日字段,所以我可以在今年的第一个生日(ORDER BY month,day)排序它,但我不能似乎进一步得到了。
任何帮助将不胜感激。
Zagga
我有一个存储(除其他之外)个人出生日期的MySQL表。按截止日期对MySQL表进行排序
是否有任何方法来排序表,以便下一个应有的生日在顶部?
我有日期存储在标准的yyyy-mm-dd日期格式和单独的年,月和日字段,所以我可以在今年的第一个生日(ORDER BY month,day)排序它,但我不能似乎进一步得到了。
任何帮助将不胜感激。
Zagga
没有必要单独存储年,月,日。
而且你也不需要订购你的表。
您只需按照您的意愿订购您的查询。
像这样的东西应该让你开始:
SELECT month(t.dob) as m,
dayofmonth(t.dob) as d,
FROM mytable t
ORDER BY 1,2
Select ...
From 'Table'
Where DayOfYear(BirthDate) <= DayOfYear(CurDate())
Order By DayOfYear(BirthDate) Desc
因为在那里,并通过这条可能不会表现良好秩序大量使用的功能。
编辑 David Gelhar对于完整列表有正确的想法。另一种方法是:
Select ...
From 'Table'
Where DayOfYear(BirthDate) <= DayOfYear(CurDate())
Order By Case
When DayOfYear(BirthDate) <= DayOfYear(CurDate()) Then 0
Else 1
End ASC
, DayOfYear(BirthDate) DESC
同样,不是性能最好的查询,但它应该给你你想要的答案。
有趣的问题,因为要做到这一点,你需要得到今年的剩余生日,然后回到明年。喜欢的东西:
Select ...
From 'Table'
Where DayOfYear(BirthDate) >= DayOfYear(CurDate())
Order By DayOfYear(BirthDate)
union
Select ...
From 'Table'
Where DayOfYear(BirthDate) < DayOfYear(CurDate())
Order By DayOfYear(BirthDate)
编辑 想到这里,你居然做需要使用断开的“月”和“天”领域,而不是只盯着DAYOFYEAR;否则如果今年是闰年而该人出生在非闰年(或反之亦然),则会得到错误的答案。那是因为我们认为我们的生日是“三月一日”,而不是“一年中的第60天”。
,当然,你不能用不同的UNION的两个部分条款“按订单” ......
所以,更多的东西一样:
Select 1,mon,day,name
From 'Table'
Where mon > Month(CurDate())
or ((mon = Month(CurDate()))
and (day >= DayOfMonth(CurDate())))
union
Select 2,mon,day,name
From 'Table'
Where mon < Month(CurDate())
or ((mon = Month(CurDate()))
and (day < DayOfMonth(CurDate())))
Order By 1,2,3