小编Con*_*lsh的帖子

MySQL按中间表中的匹配数排序

所以我有一个试图抓住"相关帖子"的查询.

类别与帖子具有一对多的关系.标签具有多对多关系.所以我的表看起来大致如下:

posts table:
id | category_id | ... | ...

tags table:
id | ... | ...

post_tag intermediate table:
id | post_id | tag_id | ... | ...
Run Code Online (Sandbox Code Playgroud)

所以,如果我已经有一个Post行,那么抓住它的"相关"帖子.我的逻辑大致是我想只抓取属于同一类别的帖子,但是按照与原始帖子匹配的标签数量来订购这些帖子.因此,同一类别中与原始帖子具有完全相同标签的其他帖子应该是非常高的匹配,而仅匹配3/4标签的帖子将在结果中显示较低.

这是我到目前为止:

SELECT *
FROM posts AS p
WHERE p.category_id=?
ORDER BY ( SELECT COUNT(id) 
           FROM post_tag AS i 
           WHERE i.tag_id IN( ? )
         )
LIMIT 5
Run Code Online (Sandbox Code Playgroud)

BINDINGS:初始帖子类别ID; 初始帖子标签ID;

显然,这不会通过子选择中的正确值来实际排序结果.我在试图考虑如何加入这个以获得正确的结果时遇到了麻烦.

提前致谢!

mysql database

5
推荐指数
1
解决办法
163
查看次数

标签 统计

database ×1

mysql ×1