約 150 万のレコードを含むセット テーブル (MySQL) をネストしました。テーブル構造は次のとおりです。
id | name | root_id | lft | rgt | level
すべての親レコードの名前とレコード名を含む文字列を取得する必要があります。これを「full_name」と呼びましょう。たとえば、
"United States, California, Los Angeles"
「ロサンゼルス」レコード用。
次のように、1 つのレコードのすべての名前をクエリできます。
SELECT parent.name
FROM location AS node,
location AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND parent.root_id=node.root_id AND node.id=:id
ORDER BY parent.level
implode() を使用して full_name を構築する
ただし、このリクエストは 1 つのレコードに対してのみ機能し、複数の呼び出しに対しては動作が遅すぎます。だから今、'full_name' を Sphinx インデックス (またはおそらく MySQL に直接) に追加したいと思います。
質問:
各レコードに対して 'full_name' を選択して Sphinx インデックスに配置するような SQL クエリを作成することは可能ですか? このような状況では、これが理想的なソリューションになると思います。
また、「full_name」フィールドを追加して MySQL テーブルを更新しようとしましたが、更新リクエストが完了するまでに数日かかります。それはまったく良い考えですか?この更新を十分に速くすることは可能ですか?
PostgreSQL に移行して、階層的なリクエストを使用する必要があるのではないかと考えています (このデータベースの経験がないため、確信が持てません)。
ありがとうございました