长期聆听者,第一次来电者。我已经研究这个问题几个小时了,但一直无法找到我的具体问题的答案。
我在数据库中有三个与产品相关的表:
- tbl_item (with
item_id
,item_name
, etc...) -- 基本项目表 - tbl_item_term (with
term_id
andterm_name
) -- 描述性术语 - tbl_item_term_map (with
item_id
andterm_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。
对于左连接三表问题,我找到了许多有用的答案,但没有适合这种特殊情况的答案。提前致谢!
克里斯
编辑
这是 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 行的 '' 附近使用)。这就是“不用于生产”的意思吗?