我试图根据标签获得相关帖子
例如我有这样的表
------------------------
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.,,
------------------------
请帮忙解决一下这个任务。
答案 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