gpt4 book ai didi

php - MySQL explode array of values 用于对结果进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:55 25 4
gpt4 key购买 nike

我必须在名为 date_of 的列中为事件的日期存储不同数量的值。它可以有多个日期发生,例如 10 月 1 日、2 日和 6 日。我需要将其作为三个不同的日期存储在该列中。现在我这样做:

1350619200, 1350705600, 1350792000

所以我想做的是按日期对 mysql 结果进行排序。第一个日期应该是它被排序的日期,但是如果有多个日期,如上所示,如果日期过去了,那么它应该转到第二个日期,然后是第三个日期等。

我不确定如何开始,我的主要优先事项是按数组中的第一个日期对结果进行排序,我问题的另一部分并不那么重要。

最佳答案

如果您按始终设置的第一个字段排序,那么您可以尝试提取该字段:

ORDER BY SUBSTRING_INDEX(date_of, ',', 1);

实际上,您可以按 date_of 进行排序,因为字典顺序得到了维护。如果您想按 last 子字段排序,您会遇到麻烦,但既然您想要第一个...

现在“如果日期的第一个元素过去了”有点棘手。

ORDER BY CASE WHEN SUBSTRING_INDEX(date_of, ',', 1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(date_of, ',', 1)
ELSE ... END

可能是一个开始,但是如果没有第二个子字段?没有?如果我们迭代 SUBSTRING_INDEX,我们将再次获得第一个字段。

您将不得不迭代 CASE 本身。 不寒而栗

ORDER BY CASE WHEN SUBSTRING_INDEX(date_of, ',', 1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(date_of, ',', 1)
ELSE
CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 2),',',-1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 2),',',-1)
ELSE
CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 3),',',-1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 3),',',-1)
ELSE 999999999
END
END
END

我可以看出这种结构没有什么好的表现。我会强烈建议将三个日期放在三个不同的列中,或者将模型重新设计为将日期放在单独的表格中。

关于php - MySQL explode array of values 用于对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557018/

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