SQLでこれを解決する方法がわかりません:
テーブル広告:
ad_id
ad_title
ad_type_id
.... テーブル ADS_DATA:
ad_data_id
ad_id
ad_data_name
ad_data_value
わかりました、簡単にしてみましょう: テーブル ADS は、タイプ ad_type_id のオブジェクトの共通データを格納します。テーブル ADS_DATA は、その ad_type_id に応じて、オブジェクトの追加データを格納します。
ADS_DATA.ad_data_name にはデータの名前 (通常のテーブルでは列名) が格納され、ADS_DATA.ad_data_value にはこのデータの値が格納されます。ad_type_id に応じて、ADS_DATA テーブルには特定の ad_data_name 値が入力されます。例えば:
ADS
ad_id = 1,ad_type_id = 2
ad_id = 2,ad_type_id = 3
ADS_DATA
ad_data_id = 1,ad_id = 1,ad_data_name = 'rooms',ad_data_value = 2
ad_data_id = 2,ad_id = 1,ad_data_name = 'size',ad_data_value = 20
ad_data_id = 3,ad_id = 2,ad_data_name = 'fingers',ad_data_value = 15
ad_data_id = 4,ad_id = 2,ad_data_name = 'toes',ad_data_value = 5
OK、特定の ad_id (名前または値に関係なくすべての行) を使用して ADS_DATA からすべての行を取得する方法と、(ad_data_name = x and ad_data_value = y) AND (ad_data_name = x1 and ad_data_value = y2) AND ...
私はそれがひどい混乱であることを知っていますが、読んでくれてありがとう!!
更新: ここに例があります: さまざまなカテゴリ (ADS.ad_type_id) の広告システムを構築しようとしています。選択した広告のタイプに応じて、ads_data テーブルには、このカテゴリに固有のデータが入力されます。たとえば、AD ハウス カテゴリは、ads_data テーブルに含まれます。各カテゴリの可能なすべてのデータの名前を含む列を使用し、必要なものだけを入力しますが、それは無駄だと思ったので、列を含むテーブルを作成することにしました:
ad_data_id UNIQUE ID
ad_id REFERENCE TO ADS.ad_id
ad_data_name for the "column name",e.g: house_rooms
ad_data_value for the value.
INSTEAD OF A "NORMAL" RELATION:
ad_data_id UNIQUE ID
ad_id REFERENCE TO ADS.ad_id
house_rooms ad data,only fill columns relative to choseen category(e.g:house_)
house_size
house_baths
car_engine
car_hp
car_year
...
ADS テーブルを検索し (たとえば、広告価格でフィルタリングします (これはすべての広告に共通のデータであるため、ADS_DATA ではなく ADS テーブルにあります)、次のような行のみを取得します:(house_rooms BETWEEN X AND Y) AND (house_size BETWEEN A AND B). ADS_DATA 列の間には、「OR」ではなく「AND」が必要です。各カテゴリに必要な列のみを入力しますか?
ありがとう
更新: キーと値のペアの使用に反対するアドバイスをしているグーグルはたくさんありますが、パフォーマンスの低下にもかかわらず、解決策がここにあることがわかりました: キーと値のペアを格納するテーブルから選択するための MySQL クエリが必要です