1

テーブルに「ページ」というツリーがあるとしましょう。

Foo
  -- Bar 1
  -- Bar 2
      -- Bar 3
  -- Some foo
  -- Some value
Bar
  -- Bar 4

ノード名で検索したい。たとえば、「bar%」。期待される出力は次のようになります。

Foo
  -- Bar 1
  -- Bar 2
     -- Bar 3
Bar
  -- Bar 4

MySQL で正しいクエリを作成するための解決策が見つかりません。検索は問題ではありません。検索結果でノードの深さを取得する方法がわかりません。

4

1 に答える 1

5
SELECT  mc.*,
        (
        SELECT  COUNT(*)
        FROM    page mp
        WHERE   mc.lft BETWEEN mp.lft AND mp.rgt
        ) AS depth
FROM    page mc
WHERE   mc.name LIKE 'bar%'

(lft, rgt)を単一のフィールドとして作成し、このフィールドを上書きsets LineStringすると、このクエリを改善できます。SPATIAL INDEX

SELECT  mc.*,
        (
        SELECT  COUNT(*)
        FROM    page mp
        WHERE   MBRWIthin(Point(0, mc.lft), mp.sets)
        ) AS depth
FROM    page mc
WHERE   mc.name LIKE 'bar%'

詳細については、次の記事を参照してください。

于 2009-12-29T13:08:13.543 に答える