我有以下结构:
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匹配。
由于
答案 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。
也许你应该重新考虑一下你的问题。