返回相似标记 url 的列表 mysql
urls 表
url | 日期 |
---|---|
http://url1 | a |
http://url2 | b |
http://url3 | c |
http://url4 | d |
标签表
url | 标签 |
---|---|
http://url1 | x |
http://url1 | y |
http://url2 | x |
http://url2 | y |
http://url3 | x |
http://url3 | z |
http://url4 | z |
url 表包含 url 数据,tags 表包含 url 标签数据。
我希望具有相似标签的网址按相似标签的数量排序,
例如1: 如果我想要具有与 URL 'http://url1' 类似标签的 URL 查询应返回
url | 类似标签 |
---|---|
http://url2 | x,y |
http://url3 | x |
'http://url1' 有 x,y
'http://url2' 有 x,y 与 'http:// /url1'
'http://url3' 与 'http://url1' 有 x 相同点,
例如 2: 对于 'http://url4'
url | 相似标签 |
---|---|
http://url3 | z |
'http://url3' 的 z 与 'http://url4' 相同
,因此 URL 应按相似标签计数 (desc) 顺序
返回:查询应该只返回指定网址的类似网址,例如eg1'http://url1'
我不擅长较大的sql查询,所以我需要问这个。
先感谢您
urls table
url | date |
---|---|
http://url1 | a |
http://url2 | b |
http://url3 | c |
http://url4 | d |
tags table
url | tags |
---|---|
http://url1 | x |
http://url1 | y |
http://url2 | x |
http://url2 | y |
http://url3 | x |
http://url3 | z |
http://url4 | z |
the url table has url data and tags table has url tags data.
I want urls having similar tags ordered by the count of similar tags
eg1:
if i want URLs which has similar tags as URL 'http://url1'
the query should return
url | similar tags |
---|---|
http://url2 | x,y |
http://url3 | x |
'http://url1' has x,y
'http://url2' has x,y in common with 'http://url1'
'http://url3' has x in common with 'http://url1'
eg2:
for 'http://url4'
url | similar tags |
---|---|
http://url3 | z |
'http://url3' has z in common with 'http://url4'
so urls should be returned order by similar tags count (desc)
note: The query should only return similar urls for specified url like in eg1 'http://url1'
i am not good at larger sql queries, so i need to ask this.
Thank you in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以选择添加
WHERE urls.url <> 'http://url1'
(在GROUP BY
之前,最后一个INNER JOIN
之后)请参阅:DBFIDDLE
编辑:从表
标签
开始,就像@Andrea_86建议的那样,也有效:Optionally you can add a
WHERE urls.url <> 'http://url1'
(Before theGROUP BY
, and after the lastINNER JOIN
)see: DBFIDDLE
EDIT: Starting from the table
tags
, like @Andrea_86 suggest, also works: