mysql-如何限制3个表之间的标签
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-如何限制3个表之间的标签,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2464字,纯文字阅读大概需要4分钟。
内容图文
![mysql-如何限制3个表之间的标签](/upload/InfoBanner/zyjiaocheng/881/a9f4501ec5c64b0cb5437fa26fe8fe4c.jpg)
我正在使用标签系统,它应该做的是您可以查询并选择标签,例如jQuery和javascript,库标签.它仅应显示与查询相关的脚本,并且仅显示具有标签的脚本.这是数据库布局:
脚本表:
+-----------+---------------+
| script_id | name |
+-----------+---------------+
| 1 | jQuery |
| 2 | Sencha Touch |
| 3 | Codeigniter |
| 4 | Google Chrome |
| 5 | memcached |
| 6 | PHP |
| 7 | MooTools |
| 8 | node.js |
| 9 | jQuery Mobile |
+-----------+---------------+
标签表:
+--------+-------------+-------------+
| tag_id | name | url_name |
+--------+-------------+-------------+
| 1 | JavaScript | javascript |
| 2 | Library | library |
| 3 | PHP | php |
| 4 | MySQL | mysql |
| 5 | Cache | cache |
| 6 | HTML | html |
| 7 | Open source | open-source |
+--------+-------------+-------------+
标记表:
+-----------+--------+-----------+
| tagged_id | tag_id | script_id |
+-----------+--------+-----------+
| 1 | 1 | 1 | # javascript -- jQuery
| 2 | 2 | 1 | # library -- jQuery
| 3 | 1 | 9 | # javascript -- jQuery mobile
+-----------+--------+-----------+
当我运行SQL时,它仍会选择jQuery Mobile,但不应这样做,因为它不包含jQuery所包含的库标签,我需要它来约束必须满足所选标签的结果.
这是我的SQL:
SELECT scripts.script_id,
scripts.name
FROM
(
scripts scripts
LEFT OUTER JOIN tagged tagged ON tagged.script_id = scripts.script_id
LEFT OUTER JOIN tags tags ON tags.tag_id = tagged.tag_id
)
WHERE MATCH(scripts.name) AGAINST ('jquery*' IN BOOLEAN MODE) AND ( tags.url_name = 'javascript' OR tags.url_name = 'library' )
GROUP BY script_id
ORDER BY scripts.name
LIMIT 0, 25
它返回:
+-----------+---------------+
| script_id | name |
+-----------+---------------+
| 1 | jQuery |
| 9 | jQuery Mobile |
+-----------+---------------+
如果将OR更改为AND,则根本不会返回任何内容,或者如果我从标签(和)中删除了括号,也不会返回任何内容.
如何使查询约束标签?
解决方法:
试试看:
select s.script_id, s.name from scripts s
join tagged tj on s.script_id = tj.script_id
join tags t on t.tag_id = tj.tag_id
where s.name like 'jQuery%' and t.url_name in ('javascript', 'library')
group by s.script_id, s.name
having count(*) = 2
order by s.name
limit 25
唯一需要考虑的是,必须将2替换为in子句中的元素数量.
这是fiddle.
内容总结
以上是互联网集市为您收集整理的mysql-如何限制3个表之间的标签全部内容,希望文章能够帮你解决mysql-如何限制3个表之间的标签所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。