长时间听众,第一次来电。 我一直在研究这个问题几个小时,但一直无法找到我的具体问题的答案。
我在数据库中有三个与产品相关的表:
item_id
,item_name
等...) - 基本项目表term_id
和term_name
) - 描述性词语item_id
和term_id
) - 为项目分配条款每个项目都有多个与之关联的术语。我要做的是根据他们的条款显示与正在浏览的项目相关的所有项目。
例如:
item1 has term1, term2, term3 assigned to it<br>
item2 has term2, term4, term6 assigned to it<br>
item3 has term4, term5, term6 assigned to it
在每个项目页面上,我想展示相关产品。在这种情况下,item3会将item2显示为相关产品,因为它共享term4。
我已经找到了一些有用的 left-joining-three-tables 问题的答案,但没有任何适合这种特殊情况的答案。提前谢谢!
克里斯
修改
以下是Sajuna提供的代码片段,经过修改以反映我的表/字段名称:
SELECT ti.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 (
SELECT tt.term_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 ti.item_id = 2536;
);
当我只运行嵌套查询时,它会返回分配给ID的五个字段,如预期的那样。但是当我运行整个事情时,我收到一个错误(#1064 - 您的SQL语法中有错误;请查看与您的MySQL服务器版本相对应的手册,以便在第9行附近使用正确的语法)。这是“非生产”的意思吗?
答案 0 :(得分:0)
如果不用于生产,你可以使用它。
SELECT tbl_item.id FROM tbl_item ti
INNER JOIN tbl_item_term_map ttm on ttm.tbl_item_id = ti.id
INNER JOIN tbl_item_term tt on tt.id = ttm.tbl_item_term_id
WHERE tt.terms IN (
SELECT tt.terms FROM tbl_item ti
INNER JOIN tbl_item_term_map ttm on ttm.tbl_item_id = ti.id
INNER JOIN tbl_item_term tt on tt.id = ttm.tbl_item_term_id
WHERE ti.id = 111;
);