按复杂值排序mysql表

时间:2012-08-07 15:44:19

标签: mysql function

我的表格包含记录,其中每条记录都有自己的历史记录,如下所示:

65465406540-245|65465408540-654

历史条目计数没有限制(列类型是文本,所以......)。历史条目总是从最旧到最新排序。意味着最新的条目在右边。

历史记录条目由管道字符“|”分隔。一个历史记录条目包括时间戳,短划线“ - ”作为分隔符,1-4位数字表示进行更改的用户ID。

现在我的问题是我想通过最近(或最旧)的历史记录条目对表格中的记录进行排序。我该怎么做?

我正在考虑MySQL函数,因为结果必须已经排序到我的PHP脚本,但我不知道从哪里开始,所以非常感谢每一个帮助。

2 个答案:

答案 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