return 相似标记网址列表 mysql
return list of similar tagged urls mysql
urls table
url
date
http://url1
a
http://url2
b
http://url3
c
http://url4
d
标签table
url
tags
http://url1
x
http://url1
y
http://url2
x
http://url2
y
http://url3
x
http://url3
z
http://url4
z
url table 有 url 数据和标签 table 有 url 标签数据。
我想要 url 具有按相似标签的数量排序的相似标签
eg1:
如果我想要 URLs 具有与 URL 'http://url1' 相似的标签
查询应该 return
url
similar tags
http://url2
x,y
http://url3
x
'http://url1' 有 x,y
'http://url2' 与 'http://url1'
有相同的 x,y
'http://url3' 与 'http://url1'
有相同的 x
eg2:
'http://url4'
url
similar tags
http://url3
z
'http://url3' 与 'http://url4'
有相同的 z
所以 urls 应该 return 按相似标签计数排序 (desc)
注意:对于指定的 url,查询应该只 return 类似 url,如 eg1 'http://url1'
我不擅长较大的 sql 查询,所以我需要问这个。
提前致谢
SELECT
urls.url,
GROUP_CONCAT(t1.tags) as "similar tags"
FROM urls
INNER JOIN tags t1 ON t1.url=urls.url
INNER JOIN tags t2 ON t2.url='http://url1' and t2.tags = t1.tags
GROUP BY urls.url
您可以选择添加一个 WHERE urls.url <> 'http://url1'
(在 GROUP BY
之前和最后一个 INNER JOIN
之后)
参见:DBFIDDLE
编辑:从 table tags
开始,如@Andrea_86 建议,也有效:
SELECT
t1.url,
GROUP_CONCAT(t1.tags) as "similar tags"
FROM tags t1
INNER JOIN tags t2 ON t2.url='http://url1' and t2.tags = t1.tags
GROUP BY t1.url
urls table
url | date |
---|---|
http://url1 | a |
http://url2 | b |
http://url3 | c |
http://url4 | d |
标签table
url | tags |
---|---|
http://url1 | x |
http://url1 | y |
http://url2 | x |
http://url2 | y |
http://url3 | x |
http://url3 | z |
http://url4 | z |
url table 有 url 数据和标签 table 有 url 标签数据。
我想要 url 具有按相似标签的数量排序的相似标签
eg1: 如果我想要 URLs 具有与 URL 'http://url1' 相似的标签 查询应该 return
url | similar tags |
---|---|
http://url2 | x,y |
http://url3 | x |
'http://url1' 有 x,y
'http://url2' 与 'http://url1'
有相同的 x,y'http://url3' 与 'http://url1'
有相同的 xeg2: 'http://url4'
url | similar tags |
---|---|
http://url3 | z |
'http://url3' 与 'http://url4'
有相同的 z所以 urls 应该 return 按相似标签计数排序 (desc)
注意:对于指定的 url,查询应该只 return 类似 url,如 eg1 'http://url1'
我不擅长较大的 sql 查询,所以我需要问这个。
提前致谢
SELECT
urls.url,
GROUP_CONCAT(t1.tags) as "similar tags"
FROM urls
INNER JOIN tags t1 ON t1.url=urls.url
INNER JOIN tags t2 ON t2.url='http://url1' and t2.tags = t1.tags
GROUP BY urls.url
您可以选择添加一个 WHERE urls.url <> 'http://url1'
(在 GROUP BY
之前和最后一个 INNER JOIN
之后)
参见:DBFIDDLE
编辑:从 table tags
开始,如@Andrea_86 建议,也有效:
SELECT
t1.url,
GROUP_CONCAT(t1.tags) as "similar tags"
FROM tags t1
INNER JOIN tags t2 ON t2.url='http://url1' and t2.tags = t1.tags
GROUP BY t1.url