我被另一个开发人员创建的mysql表困住了。它是一个假日邮轮表,包括目的地、船只和航行日期(以及其他字段)。
Destinations Ships Sailing Dates
Antarctica MS QE2 2 Dec 2018, 1 Jan 2019
Antarctica MS TBS 2 Feb 2019, 3 Mar 2019
Antarctica MS JRB 9 Nov 2018, 5 Dec 2018
如图所示,每艘船可以有多个开航日期,以逗号分隔的文本输入。但我只对每一排的首航日期感兴趣。
例如,“2018年12月2日”是第一行的第一个日期。同样,“2019年2月2日”是第二排的第一个日期,依此类推。
我需要一个php select语句来在每行的第一个日期对整个表进行排序。为了使事情更简单,我考虑向表中添加另一个日期字段,并将每行的第一个日期复制到新的日期字段中,然后根据该字段对表进行排序。但这是一个全面的解决方案,我不喜欢。
有一个简单的php/sql语句可以实现这一点吗?我想到了php explode()函数。但我不知道怎样才能把它合并到select语句中。任何帮助都将不胜感激。
更新:谢谢你的建议。我完全同意,这张table一团糟。假设我将日期移动到一个新表中,旧表中的每一行都有多行,如下所示。
Destinations Ships Voyage ID
Antarctica MS QE2 1
Antarctica MS TBS 2
Antarctica MS JRB 3
日期表
--航次id-----开航日期
-------2018年12月2日
-------2019年1月1日
-------2019年2月2日
-------2019年3月3日
-------2018年11月3日至9日
-------2018年12月5日
现在,我应该使用什么sql命令按照新日期表中每个航行id的第一个日期对旧表进行排序。
1条答案
按热度按时间p1tboqfb1#
你的数据库设计很糟糕。你只需要一张table,而不是一张table放船,一张table放目的地,一张table放实际旅行。这不是关系数据库应该是什么。
此外,日期不是作为日期而是作为字符串存储的,甚至在一个字符串中有多个日期。再糟糕不过了。所以最好的建议是重写整个数据库。
如果您不想重新设计数据库或者不允许这样做,那么我的建议是:不要尝试在sql查询中处理这个问题。只需从数据库中读取所有记录,然后在php中进行字符串操作和排序。