【发布时间】:2021-09-25 20:55:33
【问题描述】:
我的桌子就像 -
items表-
id-----item_id----name----tags--------------------------------------created_at
1------1234------test 1---["tag1", "tag2", "tag3","tag4", "tag5"]---2021-07-13 17:31:08
2------1234------test 1---["tag1", "tag2", "tag3","tag4", "tag5"]---2021-06-13 12:31:34
3------4568------test 2---["tag1", "tag4", "tag5","tag6", "tag7"]---2021-06-13 12:32:05
4------6789------test 3---["tag1", "tag3", "tag5","tag6", "tag7"]---2021-05-13 12:23:34
5------7890------test 4---["tag1", "tag4", "tag5","tag6", "tag7"]---2021-05-13 12:23:34
6------2456------test 5---["tag1", "tag2", "tag5","tag7", "tag8"]---2021-05-13 12:23:34
7------3812------test 9---["tag1", "tag2", "tag3","tag4", "tag9"]---2021-05-13 12:23:34
tags表
id-----name
1------tag1
2------tag2
3------tag3
4------tag4
5------tag5
6------tag6
7------tag7
8------tag8
9------tag9
item_tag表
id----tag_id----item_id
1-----1---------1
2-----1---------2
3-----1---------3
4-----1---------4
5-----1---------5
6-----1---------6
7-----2---------1
8-----2---------2
9-----2---------6
10----3---------1
11----3---------2
12----3---------4
13----4---------1
14----4---------2
15----4---------3
16----4---------5
如果我想将它们与某个项目进行比较,我如何才能以 desc 顺序找到具有最佳匹配标签的项目!就像我想找到与给定项目的标签相比的前 5 个最匹配的项目 -
id-----item_id----name----tags--------------------------------------created_at
7------3597------test 6---["tag1", "tag2", "tag4","tag7", "tag8"]---2021-07-13 17:31:08
我想要的结果是 -
item_id-------name------matched_tags
2456----------test 5----4
3812----------test 9----3
7890----------test 4----3
4568----------test 2----3
1234----------test 1----3
6789----------test 3----2
我试过了-
SELECT distinct items.item_id, items.name, COUNT(items.item_id) AS tag_count
FROM items
JOIN item_tag
ON item_tag.item_id = items.id
WHERE item_tag.tag_id IN (121,126,2189,796,63,408,47,14,332,3937,27)
GROUP BY items.item_id, items.name
ORDER BY tag_count desc
但问题是我每天都有一些重复的项目(最多项目,不是全部)。所以它会为重复的项目返回更大的计数-
假设我有一个像 -
id-----item_id----name----tags--------------------------------------created_at
4------6789------test 3---["tag1", "tag3", "tag5","tag6", "tag7"]---2021-05-13 12:23:34
3 次。所以它返回 tags_count 6 而不是 2
【问题讨论】:
-
您尝试的查询是什么,您在哪里遇到问题?
-
用我迄今为止尝试过的内容编辑了我的问题。
标签: mysql sql database laravel eloquent