私は3つのテーブルを持っています:
部品:
+-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | +-------+------------------+------+-----+---------+----------------+ +----+ | id | +----+ | 1 | | 2 | | 3 | +----+
Parts_partid:
+-----------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+------------------+------+-----+---------+-------+ | part_id | int(10) unsigned | NO | PRI | NULL | | | partid_id | int(10) unsigned | NO | PRI | NULL | | +-----------+------------------+------+-----+---------+-------+ +---------+-----------+ | part_id | partid_id | +---------+-----------+ | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 1 | | 2 | 4 | | 2 | 5 | | 3 | 6 | | 3 | 7 | | 3 | 8 | +---------+-----------+
党派:
+-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | key | varchar(50) | NO | MUL | NULL | | | value | varchar(50) | NO | | NULL | | +-------+------------------+------+-----+---------+----------------+ +----+-----+-------+ | id | key | value | +----+-----+-------+ | 1 | l | foo | | 2 | p | bar | | 3 | s | baz | | 4 | l | 3 | | 5 | p | 5 | | 6 | s | r | | 7 | l | rr | | 8 | l | rrr | +----+-----+-------+
基本的に、各パーツは任意のパーツIDで構成されます。たとえば、パート#1にはl ='foo'、p ='bar'、s='baz'があります。
l ='foo'を持つすべての部分を検索したい場合は、この結合を使用します
SELECT p.id FROM parts AS p
INNER JOIN parts_partid ppi ON ppi.part_id = p.id
INNER JOIN partid pi ON ppi.partid_id = pi.id
WHERE pi.key = 'l' AND pi.value = 'foo';
それは私にパート#1と#2を与えます。
ここで、l='foo'およびp='5'を持つすべてのパーツを検索します(これにより、パーツ#2のみが生成されるはずです)。これどうやってするの?