我在数据库中有三个与产品相关的表:
tbl_item -- basic item table
---------
item_id | item_name
tbl_item_term -- descriptive terms
--------------
term_id | term_name
tbl_item_term_map -- assigns terms to items
-----------------
item_id | term_id
感谢较早的问题,我可以通过执行两个查询来按术语选择与特定项目相关的所有项目。
一个用于收集项目的条款(在此示例中 item_id 2736):
SELECT
tt.term_id
FROM tbl_item ti
INNER JOIN tbl_item_term_map ttm
on ttm.item_id = ti.item_id
INNER JOIN tbl_item_term tt
on tt.term_id = ttm.term_id
WHERE ti.item_id = 2736
然后我将结果解析成一个数组,所以在一些 php 代码之后,我得到了:
$array = (1,7,12,20)
然后我把这个数组插入我的网站,如下所示:
SELECT DISTINCT
item_name
FROM tbl_item ti
INNER JOIN tbl_item_term_map ttm
on ttm.item_id = ti.item_id
INNER JOIN tbl_item_term tt
on tt.term_id = ttm.term_id
WHERE tt.term_id IN($array)
它返回每个相关项目的条款1,7,12,20
。
我现在想要的是返回具有多个共同术语的项目。例如,
related item1 has terms 1,2,3
related item2 has terms 1,7,9
related item3 has terms 7,8,9
理想情况下,我的新查询将只返回 item2,因为它具有共同的术语 1 和 7。有任何想法吗?
克里斯
编辑
换句话说,假设我有这个查询:
SELECT ti.item_id
FROM tbl_item ti
JOIN tbl_item_term_map ttm on ttm.item_id = ti.item_id
JOIN tbl_item_term tt on tt.term_id = ttm.term_id
WHERE tt.term_id = 1
UNION
SELECT ti.item_id
FROM tbl_item ti
JOIN tbl_item_term_map ttm on ttm.item_id = ti.item_id
JOIN tbl_item_term tt on tt.term_id = ttm.term_id
WHERE tt.term_id = 7
第一个查询单独提供 100 个结果,第二个查询提供 50 个结果,与 结合使用时UNION
,总数为 120 个唯一 ID。我要提取的就是缺少 30 个重复的 ID。如何从两个查询中获取重复项?