我被另一个开发人员创建的 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
Dates Table
--Voyage ID------Sailing Dates
-------1------------2 Dec 2018
-------1------------1 Jan 2019
-------2------------2 Feb 2019
-------2------------3 Mar 2019
-------3------------9 Nov 2018
-------3------------5 Dec 2018
现在,我应该使用什么 SQL 命令根据新 DATES 表中每个 Voyage ID 的第一个日期对旧表进行排序。
最佳答案
您正遭受糟糕的数据库设计之苦。您只需一张 table ,而不是一张用于船舶的 table ,一张用于目的地的 table ,一张用于实际旅行的 table 。这不是关系数据库应有的样子。
此外,日期不是以日期形式存储,而是以字符串形式存储,甚至一个字符串中有多个日期。情况再糟糕不过了。 所以最好的建议是重写整个数据库。
如果您不想重新设计数据库或者不允许您这样做,那么我的建议是:不要尝试在 SQL 查询中解决此问题。只需从数据库中读取所有记录,然后在 PHP 中进行字符串操作和排序即可。
关于php - 如何对具有多个值的字段的 MySQL 表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52402124/