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

relevance(これはin を使用しているため、mysql 固有のものだと思います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

は最大で 1 を返すrelevanceため、2 のは決して得られません。(subject_id LIKE 1) + (subject_id LIKE 2)

おそらく、クエリを再考する必要があります。

于 2013-08-30T14:02:56.883 に答える