获取mysql中所选项的相关项

时间:2013-10-13 00:55:11

标签: mysql

长时间听众,第一次来电。 我一直在研究这个问题几个小时,但一直无法找到我的具体问题的答案。

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

  • tbl_item(包含item_iditem_name等...) - 基本项目表
  • tbl_item_term(包含term_idterm_name) - 描述性词语
  • tbl_item_term_map(item_idterm_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行附近使用正确的语法)。这是“非生产”的意思吗?

1 个答案:

答案 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;

 );