開発言語・DB:PHP/MySQL
geo_places
800 万の地理的な場所を含むテーブルがあります。
これらの場所はすべて階層的で、私は
- parent_id (隣接) ,
- lft/rgt (ネストされたセット)
- および祖先(列挙)。
entities
これで、地理的な場所に割り当てられた「関心のあるポイント」テーブルが呼び出され、各エンティティに対して次のように記録されます。
lft
の位置の値geo_places
ID
そして地理的な場所の実際。
ここで、場所の下にあるすべての場所のカウント EFIFICNETLY (ただし、とにかくこれをキャッシュします) を含むディレクトリ リストを提供する方法が必要です。
たとえば、ヨーロッパを取り上げると、parent_id がヨーロッパであるすべての場所と、その下にあるエンティティの量も表示されます。場所はヨーロッパに直接割り当てられるのではなく、イタリアの小さな村 (ヨーロッパの子) に割り当てられる可能性があることに注意してください。
次のいずれかの理由で、それがヨーロッパの子であることを知っています。
lft
イタリアの小さな村の価値はと のlft
価値rgt
の間にある- または、祖先がその場所にマッピングされているためです。
たとえば、ヨーロッパの祖先パスは/1
5 で、ID は 5 です (1 は「世界」を表します)。そして、イタリアの小さな村には/1/5/234/28924/124128
どこで 1 = 世界 5 = ヨーロッパ 234 = イタリア 28924 = ベルガモ など...
とにかく、これは私がデータセットを構造化した方法であり、クエリをより効率的にするために、階層構造の混合物を既に使用しています (なぜネストされたセット、隣接関係、および列挙をサポートしているのか疑問に思っている方のために) .. これは、この方法ですべての構造を最大限に活用するためです)。
これは私がやろうとしていることの例です。
私は柔軟性があり、必要に応じて場所の管理方法を変更できます。ただし、これはマルチテナント アプリケーションでもあるため、回避できる場合は、geo_places に対するカウントの保存を回避したいと考えています。
簡単に言えば、場所を選択して、その場所またはその場所の子に割り当てられた関心のあるポイントを持つすべての場所を表示します。
推奨事項はありますか?