下面是我设置的3张桌子。 '词'和'word_part_mapping'表是通过索引零件表中零件名称中的所有单词自动生成的。如何搜索与其他表关联的单词表中的单词列表?
//'parts' table
+----------+--------------+
| part_num | part_name |
+----------+--------------+
| 10111 | front bumper |
| 10112 | rear bumper |
+----------+--------------+
//'words' table
+------+------------+
| id | word |
+------+------------+
| 1 | front |
| 2 | bumper |
| 3 | rear |
+------+------------+
//'word_part_mapping' association table
+---------+----------+
| word_id | part_num |
+---------+----------+
| 1 | 10111 |
| 2 | 10111 |
| 3 | 10112 |
| 1 | 10112 |
+---------+----------+
我如何查询这个如果“前保险杠”和用户的搜索我希望查询返回一个包含用户搜索所有的话结果如何?
SELECT p.*
FROM words w
LEFT JOIN word_part_mapping wpm ON w.id=wpm.word_id
LEFT JOIN parts p ON wpm.part_num=p.part_num
WHERE w.word='front' AND w.word='bumper'
显然,上述查询不工作,因为这个词不能等于两个“正面”和“丰收”。这可以工作,如果我做或,但我不想这样做,因为它返回太多的结果(数据库中的50,000多个零件)。
==============================================
编辑:得到它的工作终于...
SELECT p.*
FROM words w
LEFT JOIN word_part_mapping wpm ON w.id=wpm.word_id
LEFT JOIN parts p ON wpm.part_num=p.part_num
WHERE w.word IN('front','bumper')
GROUP BY p.part_num
HAVING COUNT(DISTINCT w.word) = 2
,其中2项数用户搜索
考虑到答案张贴到你的问题,以便其他人可以受益 – peterm 2013-05-09 07:03:52