MySQL:如何按( - )破折号排序

时间:2012-05-01 16:23:08

标签: php mysql sql sql-order-by

我如何order by冲刺?

例如,我在下面有这些数据,

page_id   url
1         - a
2         - b
3         --- c
4         --- d
5         - e
6         - f
7         -- g
8         -- h

我追求的结果,

page_id   url
1         - a
2         - b
5         - e
6         - f
7         -- g
8         -- h
3         --- c
4         --- d

如果我这样做,

ORDER by x.url ASC

我仍然明白这一点,

page_id   url
1         - a
2         - b
3         --- c
4         --- d
5         - e
6         - f
7         -- g
8         -- h

有什么想法吗?

修改

我的实际SQL,

SELECT 
    *,
    IF(grandparentURL REGEXP '^[a-z0-9\-]+$', CONCAT('--- ', url), IF(parentURL REGEXP '^[a-z0-9\-]+$', CONCAT('-- ', url), CONCAT('- ', url))) AS url
FROM
(
    SELECT 
        p.page_id,
        p.url,
        p2.url AS parentURL,
        p3.url AS grandparentURL

    FROM page AS p

    LEFT JOIN page AS p2 
    ON p.parent_id = p2.page_id AND p.page_id != p2.page_id

    LEFT JOIN page AS p3 
    ON p2.parent_id = p3.page_id AND p2.page_id != p3.page_id

    WHERE IF('5' REGEXP '^[0-9]+$', p.page_id != '5', p.page_id IS NOT NULL)
    AND p.url != 'cms' 
) x

ORDER by x.url ASC

2 个答案:

答案 0 :(得分:1)

试试这个

ORDER BY SUBSTRING_INDEX(url, ' '),url

第一部分按字符串

中第一个空格的位置排序

答案 1 :(得分:1)

按照......首先按照首先找到空间的位置进行MULTIPLE顺序...从那里开始,然后按整个URL排序。由于common -b和-a将在同一个分组中,它们的空间将它们保持在“1”组中...然后,从那里,整个URL将强制你的正确 - a,-b,-c等< / p>

ORDER BY INSTR('x.url', ' '), x.url