0

我有以下结构:

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 匹配。

谢谢

4

3 回答 3

3

我认为像下面这样的东西会做你想做的事,尽管我并不完全清楚你所说的“相关性”是什么意思;这只是计算与用户匹配并具有subject_id1 或 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 特有的,因为使用了relevancein ORDER BY。)

于 2013-08-30T14:02:24.073 回答
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;  

?

于 2013-08-30T14:01:12.337 回答
0

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

也许您应该重新考虑您的查询。

于 2013-08-30T14:02:56.883 回答