Mysql 按匹配数获取相关结果和顺序
我有一张多对多的桌子Mysql 按匹配数获取相关结果和顺序,mysql,sql,Mysql,Sql,我有一张多对多的桌子 flyer tagged tags ----------------------------------- id tid id flyer_name fid tag_name 我目前正在处理标记的表,我想做的是选择所有相关的结果,并按匹配数对其排序 假设我有记录。。。 表标记 tid fid --------- 80 1 80 2 80 3 2 1 2 2 2
flyer tagged tags
-----------------------------------
id tid id
flyer_name fid tag_name
我目前正在处理标记的表,我想做的是选择所有相关的结果,并按匹配数对其排序
假设我有记录。。。
表标记
tid fid
---------
80 1
80 2
80 3
2 1
2 2
2 6
1 3
1 4
30 5
30 6
首先,我想选择tid为2或80的所有传单,然后按fid分组,这样它将返回fid 1,2,3
现在从1,2,3开始。我想通过使用tid字段上的CASE(如果是2或80),然后+1到变量'matches',然后根据匹配数对所有fid进行排序,同时返回属于传单的所有标签,来检查所有这些标签
Desired result
fid matches tags
1 2 80,2 #matched with tags 80,2
2 2 80,2 #matched with tags 80,2
3 1 80,1 #matched with tags 80
6 1 2,30 #matched with tags 2
这里是我目前的mysql代码,它不工作,我试图使问题尽可能简单,我可以,请让我知道,如果你认为我应该提供更多。谢谢
SELECT fid , tid , MATCHES FROM leon_tagged
WHERE tid IN (2,80)
CASE tid
WHEN '2' then 1
WHEN '80' then 1
ELSE 0 END AS MATCHES
GROUP BY fid
ORDER BY MATCHES
试试这个。我认为没有必要使用
案例
语句
SELECT T.fid
, COUNT(T.tid) AS matches
FROM tagged T
WHERE T.tid IN (2, 80)
GROUP BY T.fid
ORDER BY matches DESC, T.fid ASC;
嘿,这里有个测试
添加了标记
字段:
SELECT T.fid
, COUNT(T.tid) AS matches
, GROUP_CONCAT(DISTINCT T.tid) AS tags
FROM tagged T
WHERE T.tid IN (2, 80)
GROUP BY T.fid
ORDER BY matches DESC, T.fid ASC;
但我担心你会得到不同的期望结果:
fid matches tags
1 2 80,2 #matched with tags 80,2
2 2 80,2 #matched with tags 80,2
3 1 80 #matched with tags 80
6 1 2 #matched with tags 2
最后两行与您想要的不同,因为您在前面已经说过,您只想要(2,80)中带有
tid的标记 试试这个。我认为没有必要使用案例
语句
SELECT T.fid
, COUNT(T.tid) AS matches
FROM tagged T
WHERE T.tid IN (2, 80)
GROUP BY T.fid
ORDER BY matches DESC, T.fid ASC;
嘿,这里有个测试
添加了标记
字段:
SELECT T.fid
, COUNT(T.tid) AS matches
, GROUP_CONCAT(DISTINCT T.tid) AS tags
FROM tagged T
WHERE T.tid IN (2, 80)
GROUP BY T.fid
ORDER BY matches DESC, T.fid ASC;
但我担心你会得到不同的期望结果:
fid matches tags
1 2 80,2 #matched with tags 80,2
2 2 80,2 #matched with tags 80,2
3 1 80 #matched with tags 80
6 1 2 #matched with tags 2
最后两行与您想要的不同,因为您在前面已经说过,您只想要(2,80)
中带有tid的标记 是否可以使用大小写并形成一个标记字符串。是指结果fid,2,3作为其他变量?我试着让每件事都由一个人来完成,这是可能的。给我一分钟。@LeonArmstrong,你能编辑你的问题来提供你真正想要的标签串吗?我想看到期望的输出。很抱歉,我应该花更多的精力来解释这一点,更新我的问题,实际上所有的标签都属于特定的FlyerHanks dude,你已经为我做了太多了,我正在使用嵌套连接来获得它,答案是如此简单和容易理解!是否可以使用大小写并形成一个标记字符串。是指结果fid,2,3作为其他变量?我试着让每件事都由一个人来完成,这是可能的。给我一分钟。@LeonArmstrong,你能编辑你的问题来提供你真正想要的标签串吗?我想看到期望的输出。很抱歉,我应该花更多的精力来解释这一点,更新我的问题,实际上所有的标签都属于特定的FlyerHanks dude,你已经为我做了太多了,我正在使用嵌套连接来获得它,答案是如此简单和容易理解!