次の表があります。
systems
-----------
id
name
price
online
productid
specifications
-------------
id
systemid
type
componentid
quantity
components
-------------
id
name
brand
type
description
これらのテーブルを複数のオプションでフィルタリングする必要があります。各システムには複数の仕様行があり、各「仕様」行は対応する「コンポーネント」行にリンクしています。
私の問題はこれです:
テーブルの結合に基づいて、複数のプロパティでシステムをフィルタリングできる必要があります。私は1つの検索オプションを許可するコードを使用してきましたが、それ以上は何もしません:
select
`systems`.`id`,
`systems`.`name`,
`specifications`.`type`
from `systems`
join specifications
on `systems`.`id` = `specifications`.`systemid`
join components
on `specifications`.`componentid` = `components`.`id`
where
`specifications`.`type` = 'cpu'
and `components`.`brand` = 'amd'
これで、仕様の種類が CPU でブランドが AMD の場合に結合できますが、他にも探すものを追加すると、specifications.type ='graphics' AND components.brand = 'nvidia'
機能しないようです。私が言ったように、これは結合が機能する方法に固有のものだと思います.私はこれらのより複雑なデータベーストランザクションにまったく慣れていないので、ここで問題を明確にするのに苦労しています.
私はフレームワークとして CodeIgniter を使用しています。可能であれば、PHP で行うのではなく、MySQL を介してこれを理解したいと思います。ここで何が起こっているのかをよりよく理解したいからです。