0

长期聆听者,第一次来电者。我已经研究这个问题几个小时了,但一直无法找到我的具体问题的答案。

我在数据库中有三个与产品相关的表:

  • tbl_item (with item_id, item_name, etc...) -- 基本项目表
  • tbl_item_term (with term_idand term_name) -- 描述性术语
  • tbl_item_term_map (with item_idand 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。

对于左连接三表问题,我找到了许多有用的答案,但没有适合这种特殊情况的答案。提前致谢!

克里斯

编辑

这是 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 行的 '' 附近使用)。这就是“不用于生产”的意思吗?

4

1 回答 1

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;

 );
于 2013-10-13T01:07:03.150 回答