Mysql查询包括多个标签的文章
巴扎黑
巴扎黑 2017-04-17 11:52:06
[MySQL讨论组]

一篇文章里有多个标签,用关联表处理。如何能够查找 即包括 A 标签又包含 B 标签的文章。

巴扎黑
巴扎黑

全部回复(2)
阿神

有两种方式,第一种是利用count,如果一篇文章包含A,B,D三个标签,那么pintag中指向该文章且标签为A或B或D的记录数一定是三条「这里可能需要去重」。下面就是利用这种方式实现的语句,只需要修改in后面括号内的内容和count=后面的数字即可。

SELECT
    *
FROM
    article table1
LEFT JOIN pintag table2 ON table2.artId = table1.id
WHERE
    table2.tagId IN (1, 3)
GROUP BY
    table1.id
HAVING
    COUNT(
        DISTINCT table1.id,
        table2.tagId
    ) = 2

第二种方式就是有多少个标签就join多少张表,虽然效率比较坑,而且拼接起来比较麻烦。但是胜在简单,如果只是临时用用而且对性能无要求,可以用这种方式将就。

SELECT
    DISTINCT table1.*
FROM
    article table1
LEFT JOIN pintag table2 ON table2.artId = table1.id
LEFT JOIN pintag table3 ON table3.artId = table1.id
WHERE table2.tagId =1
AND table3.tagId =3
PHPz

这种基于标签的查询用关系型数据库会非常蛋疼,不论怎么处理性能都不会太好。如果对遇到对性能要求比较高的场景,建议用redis对多个标签进行and操作进行查询。

比如:

tag1对应book1、book2;
tag2对应book2、book3;
tag1 and tag2就可以查询到book2!
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号