数据库
首页 > 数据库> > sql-多对多查询

sql-多对多查询

作者:互联网

我有一个问题,我不知道什么是更好的解决方案.
好的,我有2个表格:posts(id,title),posts_tags(post_id,tag_id).
我的下一个任务是:必须选择带有标签ID(例如4、10和11)的帖子.
不完全相同,post可以同时具有任何其他标签.
那么,如何才能对其进行更优化?在每个查询中创建临时表?还是某种存储过程?
将来,用户可以要求脚本选择带有任意数量标签的帖子(只能是1个标签,或者同时是10个),而且我必须确保选择的方法将是解决问题的最佳方法.
对不起,我的英语,谢谢.

解决方法:

此解决方案假定post_tags中的(post_id,tag_id)被强制为UNIQUE:

 SELECT id, title FROM posts
    INNER JOIN post_tag ON post_tag.post_id = posts.id
    WHERE tag_id IN (4, 6, 10)
    GROUP BY id, title
    HAVING COUNT(*) = 3

尽管它不是所有可能的标签组合的解决方案,但很容易将其创建为动态SQL.要更改其他标签集,请更改IN()列表以获取所有标签,然后更改COUNT(*)=以检查指定的标签数.与将一堆JOIN层叠在一起相比,此解决方案的优势在于,当您更改请求时,您不必添加JOIN甚至不需要额外的WHERE条款.

标签:database-design,many-to-many,sql,mysql
来源: https://codeday.me/bug/20191106/2000219.html