我的表格包含记录,其中每条记录都有自己的历史记录,如下所示:
65465406540-245|65465408540-654
历史条目计数没有限制(列类型是文本,所以......)。历史条目总是从最旧到最新排序。意味着最新的条目在右边。
历史记录条目由管道字符“|”分隔。一个历史记录条目包括时间戳,短划线“ - ”作为分隔符,1-4位数字表示进行更改的用户ID。
现在我的问题是我想通过最近(或最旧)的历史记录条目对表格中的记录进行排序。我该怎么做?
我正在考虑MySQL函数,因为结果必须已经排序到我的PHP脚本,但我不知道从哪里开始,所以非常感谢每一个帮助。
答案 0 :(得分:1)
对于最老的,您可以使用
的RedFilters(现已编辑)回答ORDER BY LEFT(column_name,11)
按最新订购更有趣。
ORDER BY REVERSE(SUBSTR(REVERSE(column_name),1,LOCATE("|",REVERSE(column_name))-1))
让我们打破这个。 我们反转列并找到第一个|的索引
456-04580456456|542-04560456456
然后我们得到子串到这一点,它给了我们:
456-04580456456
这是逆转的最后一项,所以现在我们可以简单地REVERSE
字符串并按顺序排列最后一项:
65465408540-654
然而,这很可怕。如果可能的话,我会考虑在PHP中这样做。
答案 1 :(得分:0)
我调整了Jim的查询,因此它也可以只使用一个和/或没有历史记录条目,并且只显示时间戳以便于日期/时间计算。 这是:
SELECT *,
IF(
LOCATE('|', history) > 0,
LEFT(
REVERSE(
LEFT(
REVERSE(history),
LOCATE('|', REVERSE(history))-1
)
),
10
),
LEFT(history, 10)
) AS last
FROM table
ORDER BY last DESC