sql >> データベース >  >> RDS >> PostgreSQL

マテリアライズされたパスでツリーを並べ替えますか?

    あなたの具体化された道は正しくないと思います。

    このようなものを並べ替えるには、どのようなロジックが必要ですか

    1
    1.2
    1
    1.5
    

    2番目の1が最初の1と一緒になっていないのはなぜですか?

    持っていた場合

    1
    1.2
    2
    2.5
    

    これは些細なことです。

    編集:私はあなたの例を見ました、そしてあなたは行のマテリアライズドパスを保存していませんが、あなたは親行のマテリアライズドパスを保存しています。これが行のマテリアライズドパスが実際にどのように見えるべきかです。次のように保存した場合、ブランチが9つを超えない場合は、matpathで直接並べ替えることができます。

     id | parent_id | matpath   |          created
    ----+-----------+-----------+----------------------------
      2 |         1 | 1.2       | 2010-05-08 15:18:37.987544
      6 |         2 | 1.2.6     | 2010-05-08 17:50:43.288759
      8 |         6 | 1.2.6.8   | 2010-05-09 14:01:17.632695
      3 |         1 | 1.3       | 2010-05-08 17:38:14.125377
      4 |         1 | 1.4       | 2010-05-08 17:38:57.26743
      5 |         1 | 1.5       | 2010-05-08 17:43:28.211708
      9 |         5 | 1.5.9     | 2010-05-09 14:02:43.818646
      7 |         1 | 1.7       | 2010-05-08 18:18:11.849735
    

    それ以外の場合(> 9)は、matpathをオンにする必要があります

    のようなものに
    001.002.006
    001.002.006.008
    

    最大999のブランチをサポートします。

    注意してください

    • 0001.0002.0006のように、4桁の固定数字を使用するアプローチでも 受け入れられた回答よりも短いフィールドが表示されます
    • ユーザー関数を使用して、matpathを解析し、その場でソート値を生成することができます
    • matpathをこの形式で直接保存できます(他にもいくつかの優れたプロパティがあります)


    1. 最初にEntityFrameworkコードを使用してストアドプロシージャを作成しますか?

    2. Oracleポートをポート8080から変更します

    3. CentOS7でNetdataを使用してMySQL/MariaDBデータベースを監視する方法

    4. MySQLにJSONデータを保存する方法