下面是我設置的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