私はこれを使用しているプラットフォームを見ます:
- properties table -
id | name | ID_CATEGORY (INT)
- categories table -
id | name
- property_categories -
id_category | id_property
そして、カテゴリ別にプロパティを取得する
SELECT * FROM properties, categories, property_categories
WHERE 1
AND categories.name = "Some category name here" # match this category name
AND categories.id = property_categories.id_category # match category
AND properties.id = property_categories.id_property # and match property
しかし、最近アプリケーションでこれを見ました (3 つではなく 2 つのテーブルを使用):
- properties table -
id | name | ID_CATEGORY (VARCHAR(255))
- categories table -
id | name
次のクエリを使用して、カテゴリ別にプロパティを取得します。
SELECT * FROM properties, categories
WHERE 1
AND categories.name = "Some category name here" # match this category name
AND FIND_IN_SET(categories.id, properties.ID_CATEGORY)
パフォーマンス上の利点はありますか? 最初の方法よりも 2 番目の方法を使用する必要がありますか? このままでいいのでしょうか?
多くのフィールドが組み合わされている場合があり (ID_TYPE、ID_STATUS などを含む)、フィルター用にすべてのデータを結合する大きな JOIN があります。