返回相似标记 url 的列表 mysql

发布于 2025-01-16 20:06:40 字数 1523 浏览 2 评论 0原文

urls 表

url日期
http://url1a
http://url2b
http://url3c
http://url4d

标签表

url标签
http://url1x
http://url1y
http://url2x
http://url2y
http://url3x
http://url3z
http://url4z

url 表包含 url 数据,tags 表包含 url 标签数据。

我希望具有相似标签的网址按相似标签的数量排序,

例如1: 如果我想要具有与 URL 'http://url1' 类似标签的 URL 查询应返回

url类似标签
http://url2x,y
http://url3x

'http://url1' 有 x,y

'http://url2' 有 x,y 与 'http:// /url1'

'http://url3' 与 'http://url1' 有 x 相同点,

例如 2: 对于 'http://url4'

url相似标签
http://url3z

'http://url3' 的 z 与 'http://url4' 相同

,因此 URL 应按相似标签计数 (desc) 顺序

返回:查询应该只返回指定网址的类似网址,例如eg1'http://url1'

我不擅长较大的sql查询,所以我需要问这个。

先感谢您

urls table

urldate
http://url1a
http://url2b
http://url3c
http://url4d

tags table

urltags
http://url1x
http://url1y
http://url2x
http://url2y
http://url3x
http://url3z
http://url4z

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

urlsimilar tags
http://url2x,y
http://url3x

'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'

urlsimilar tags
http://url3z

'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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

书信已泛黄 2025-01-23 20:06:40
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

编辑:从表标签开始,就像@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
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

Optionally you can add a WHERE urls.url <> 'http://url1' (Before the GROUP BY, and after the last INNER JOIN)

see: DBFIDDLE

EDIT: Starting from the table tags, like @Andrea_86 suggest, also works:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文