再次使用我的小型数据库练习有关 mysql 的问题:
我得到的表格如下:
Songs Link Tags
======= ===== =======
Sid Sid Tid
Songname Tid Tagname
现在我要做的是,一旦我通过输入一些标签查询(或搜索)一首歌曲,以显示该歌曲必须有多少标签才能创建匹配百分比。
感谢令人敬畏的stackoverflow社区,我得到了查询
SELECT s.Sid, s.Songname
FROM Songs s
JOIN Link l ON ( l.Sid = s.Sid )
JOIN Tags t ON ( t.Tid = s.Tid )
WHERE t.Tagname IN ( 'X', 'Y' )
GROUP BY s.Sid, s.Songname
HAVING COUNT(1) = 2
搜索与这两个标签完全匹配的歌曲。
假设现在你有这首歌 A,它有标签 G、X、Y 和 Z。
查询找到这首歌是因为它有 X 和 Y。然而这首歌得到了另外 2 首歌曲,因此我想(使用 php)创建一个匹配百分比,显示这首歌曲的 50%。
我对 php 部分没有任何问题,但我无法找出一个查询来获取与这些标签匹配的所有歌曲以及它们在一个结果集中的标签总数。
干杯!
编辑1:
我注意到大多数答案都显示了我已经尝试过的内容。所以我再做一个更深入的例子:
假设你有以下 4 首歌曲:
A 带有标签 A、B、X 和 Y
B 带有标签 A、B、C、D、E、X、Y
C 带有标签 A , B, C, D, F, X
D 带有标签 X 和 Y
现在输入了用于搜索带有标签 X 和 Y 的歌曲的查询。我想要以下输出:
TotalNumberOfTags: Song:
4 A
7 B
2 D
C 没有 X 和 Y,所以他摔倒了。
编辑2:
为了说明我想使用查询
SELECT COUNT(t.Tagname) FROM FROM Songs s
JOIN Link l ON ( l.Sid = s.Sid )
JOIN Tags t ON ( t.Tid = s.Tid )
WHERE s.Songname="A"
在由上述查询引起的整个返回的歌曲名集上,在一个查询中使用 ORDER BY COUNT(t.Tagname) ASC 在集合上。