4

どうすれば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
4

2 に答える 2

1

これを試して

ORDER BY SUBSTRING_INDEX(url, ' '),url

最初の部分は、文字列内の最初のスペースの位置で並べ替えられます

于 2012-05-01T16:30:28.153 に答える
1

複数の順序で実行します...最初にスペースが最初にすべてグループ化された位置で...次に、URL全体で並べ替えます。共通の--bと--aは同じグループに含まれるため、それらのスペースはそれらをグループ「1」に保持します...その後、URL全体が適切な--a、--b、--cなどを強制します

ORDER BY INSTR('x.url', ' '), x.url
于 2012-05-01T16:57:40.267 に答える