2013-10-13 84 views
0

长时间侦听器,第一次调用者。 我一直在研究这个问题几个小时了,一直无法找到我的具体问题的答案。在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。

我发现了一些有用的回答左加入三表问题,但没有什么符合这种特殊情况。提前致谢!

克里斯

编辑

这里是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; 

); 
+0

感谢您的代码位,但是您的意思是“不适合生产”?一旦准备就绪,我打算将它放在网站上,所以我确实需要一些我可以使用的代码。 –

+0

没有我的意思是,如果是我我会做第一次获取以获取项目的相关条款,然后将其存储在一个数组中,然后执行第二次获取以基于该数组获取相关项目。确保您的表格也正确编制索引。 –