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

标签 php mysql

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

相关文章:

php - 使用php从while循环语句中的不同表中获取值

php - 获取 native react 不发送帖子

php - 当用户点击链接时如何运行 PHP 代码?

php - mysql 在短语中搜索关键字,按找到的最多关键字排序

php - 如何检查一个字符串是否以另一个字符串开头 - PHP

php - 确定哪个 PHP 脚本执行特定的 mysql 查询

MySQL 对 varbinary 字段进行不区分大小写的搜索?

mysql - 只显示其他表中不存在的值

sql - 在 sql (Firebird/MySql) 中更新/插入记录的正确/最快的方法是什么

php - DateTime::createFromFormat 如何捕获特定的日期时间?