如何在 mysql 和 php 中计算匹配标签百分比

How matched tags percentage can be calculated in mysql with php

我有 3 张桌子, 第一个是播放列表,另外两个是关键字和关键字映射。

我过去常常使用下面的 sql 来查找共享通用标签的播放列表。 我需要获取公共标签百分比并在 mysql+php 中按它排序 即使我能得到匹配的标签数,我也可以稍后在 php 中计算百分比。

表格是;按顺序播放列表、关键字、关键字映射

|pid  |authorid |totaltrack|

|kid  |keyword  |used       |createdate|

|kmid |kwid     |plid       |

上一个代码;

SELECT p1.pid FROM keywordmap km
LEFT JOIN playlists p1 ON km.plid = p1.pid
WHERE kwid 
IN (
    SELECT kwid FROM playlists p2 LEFT JOIN keywordmap km2 
    ON p2.pid = km2.plid LEFT JOIN keywords kws
    ON km2.kwid = kws.kid WHERE p2.pid = 10
)
GROUP BY plid

期望的结果是;

|plid |matchedtag|percentage
|234  |23        | 65 
|363  |21        | 55
|19   |18        | 34
|91   |1         | 3

答案就在这里。其余部分根据用户的总标签数计算百分比。

SELECT p1.pid, COUNT(plid) as matched, p1.authorid FROM keywordmap km
LEFT JOIN playlists p1 ON km.plid = p1.pid
WHERE kwid 
IN (
    SELECT kwid FROM playlists p2 LEFT JOIN keywordmap km2 
    ON p2.pid = km2.plid LEFT JOIN keywords kws
    ON km2.kwid = kws.kid WHERE p2.pid = $pid
)
GROUP BY plid ORDER BY matched DESC