按相关性选择多个值和顺序

时间:2013-08-30 13:56:45

标签: mysql

我有以下结构:

CREATE TABLE IF NOT EXISTS `user_subjects` (
  `user_subject_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `subject_id` int(11) NOT NULL,
  PRIMARY KEY (`user_subject_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

我希望得到具有subject_id 1或2的user_ids,例如按相关性排序。 (编辑:我的意思是它匹配了多少结果)

我试过这个,但不计算相关性。它返回相关性1.

http://sqlfiddle.com/#!2/944ab8/2

对于那个例子,我想得到

user_id relevance
1       1
2       2

并且如果可能的话,subject_id匹配。

由于

3 个答案:

答案 0 :(得分:3)

我想你会想做什么,尽管我并不完全清楚“相关性”是什么意思;这只是计算与用户匹配且具有subject_id 1或2的行数:

SELECT
  user_id,
  COUNT(subject_id) AS relevance
FROM
  `user_subjects`
WHERE
  subject_id IN (1, 2)
GROUP BY
  user_id
ORDER BY
  relevance DESC

(我相信这是特定于mysql的,因为在relevance中使用ORDER BY。)

答案 1 :(得分:2)

请注意我确定关注。你的意思是这样的:

SELECT user_id
     , SUM(CASE WHEN subject_id IN(1,2) THEN 1 ELSE 0 END)ttl 
  FROM user_subjects 
 GROUP 
    BY user_id;  

答案 2 :(得分:0)

好吧,你永远不会得到relevance的2,因为(subject_id LIKE 1) + (subject_id LIKE 2)最多会返回1。

也许你应该重新考虑一下你的问题。