php—如何对具有多个值的字段上的mysql表进行排序

mgdq6dx1  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(325)

我被另一个开发人员创建的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的第一个日期对旧表进行排序。

p1tboqfb

p1tboqfb1#

你的数据库设计很糟糕。你只需要一张table,而不是一张table放船,一张table放目的地,一张table放实际旅行。这不是关系数据库应该是什么。
此外,日期不是作为日期而是作为字符串存储的,甚至在一个字符串中有多个日期。再糟糕不过了。所以最好的建议是重写整个数据库。
如果您不想重新设计数据库或者不允许这样做,那么我的建议是:不要尝试在sql查询中处理这个问题。只需从数据库中读取所有记录,然后在php中进行字符串操作和排序。

相关问题