だから私はこれを行うための最良の方法は何かを判断しようとしています:私はこれをできるだけ簡単にしようとしますが、十分な情報を提供します
大規模なデータセットを持つデータベースがあります。この例では、各車は誰かが探している車です
私はテーブルを持っています:
CREATE TABLE cars (
`car_id` INT(10),
`car_name` VARCHAR(20)
)
そしてオプションテーブルのような
CREATE TABLE `car_selected_options` (
`car_sel_id` INT NOT NULL AUTO_INCREMENT,
`car_id` INT //the id of the car record created
`value` INT //id of info in a ref table
`key` VARCHAR(20) //from the car_option_reference,
)
いくつかの例は次のとおりです。値は、参照テーブル内の詳細情報の ID です (2 つのエレクトロニクスに注意してください)。
car_id=1, value='10', key='exterior_color' 10='red'
car_id=1, value='21', key='interior_color' 21='blue'
car_id=1, value='100', key='electronics' 100='radio'
car_id=1, value='101', key='electronics' 101='nav'
赤で、ナビとラジオがあるすべての車のIDを見つける必要があります。次のようなことをしています:
SELECT distinct(c.car_id)
FROM `car` c
INNER JOIN `car_selected_options` AS o ON c.car_id = o.car_id
WHERE
o.car_sel_id IN
( SELECT car_sel_id
FROM car_selected_options so
WHERE so.`key` = 'exterior_color'
AND so.value IN ('10' ) AND b.buyer_id = bm.buyer_id )
AND
o.car_sel_id IN
( SELECT car_sel_id
FROM car_selected_options so
WHERE so.`key` = 'electronics'
AND so.value IN ('100','101' ) AND b.buyer_id = bm.buyer_id )
または、キーとすべてを 1 つのテーブルに配置する代わりに、次のように、各 key.option ごとに個別のテーブルを使用する方がよいでしょうか。
car_exterior_color (could have one entry per car or multiples if this person is ok with a red or a blue colored car)
car_interior_color
car_electronics
これらの複数のサブ選択を行う代わりに (多くの場合があります)、複数の内部結合を行いますか?
これが理にかなっていることを願っています