gpt4 book ai didi

php - 如何对具有多个值的字段的 MySQL 表进行排序

转载 作者:行者123 更新时间:2023-11-29 06:39:33 25 4
gpt4 key购买 nike

我被另一个开发人员创建的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com