如何采取相关的帖子MySql?

时间:2015-12-23 15:13:14

标签: mysql join left-join

我试图根据标签获得相关帖子

例如我有这样的表

------------------------
post_id  |  term_id   |
-----------------------
   11    |     3      | 
   11    |     7      | 
   11    |     9      | 
   14    |     9      |
   14    |     1      |
   15    |     2      | 
   16    |     3      |
   16    |     4      | 
   16    |     8      | 
   16    |     2      | 
   18    |     3      | 
   18    |     4      | 
   18    |     5      |
   19    |     4      | 
   19    |     7      | 
...etc.,,
-----------------------

在上面的表中post_id 11有3个term_id 3,7,9所以现在我需要检查同一个表并选择具有相同term_id的其他帖子.post_id 16,18有term_id 3,然后post_id 19有7个term_id但是term_id 9不匹配所以我必须将另一列显示为相关帖子ID 16,18,19 像这样的东西

帖子ID 14的术语ID为9& 1但没有其他帖子有9和1所以这篇文章没有任何相关的帖子

------------------------------------------
post_id  |  term_id    |  related_post_id |
------------------------------------------
   11    |  3,7,9      |  16,18,19
   14    |  9,1        |  null
   15    |  2          |  16
   16    |  3,4,8,2    |  11,15,18,19
   18    |  3,4,5      |  11,16,19
   19    |  4,7        |  11,16,18
...etc.,,
------------------------
请帮忙解决一下这个任务。

1 个答案:

答案 0 :(得分:0)

好的..你可以使用这个group_concat函数......但是大小有1024字节的限制..这样可行。否则..您正在查看SP中的复杂SQL以构建答案

select 
    tmp1.post_id, 
    myterm_id_list, 
    group_concat(distinct t2.post_id separator  ',') from

 (SELECT 
    distinct t1.post_id, 
    GROUP_CONCAT(distinct t1.term_id SEPARATOR ',') as myterm_id_list
  FROM  test.tablename t1 
  left join test.tablename t2  on
      t2.post_id= t1.post_id
  GROUP BY t1.post_id
 ) as tmp1

 left join test.tablename t2 on
    t2.term_id in (tmp1.myterm_id_list)
 group by 
    tmp1.post_id,
    myterm_id_list