2013-08-30 3 views
0

I имеют следующую структуру:выбрать несколько значений и порядок по релевантности

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 ; 

, и я хочу, чтобы получить user_ids что subject_id 1 или 2, например, упорядоченный по релевантности. (редактировать: я имел в виду, сколько результатов он соответствует)

Я пробовал это, но это не считается релевантностью. Она возвращает Релевантность 1.

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

Для этого примера я хотел бы получить

user_id relevance 
1  1 
2  2 

и subject_id соответствует, если это возможно.

Спасибо

+0

Что вы подразумеваете под «релевантностью»? Что должна возвращаться эта колонна? Ищете строки 'COUNT'' subject_id'? –

+0

'subject_id LIKE 2' вернет' TRUE' ('1'), если' subject_id' равно '2' и' FALSE' ('0') в противном случае. –

+0

Да, подсчет 'subject_id' –

ответ

3

Обратите внимание, что я следую. Вы имеете в виду что-то вроде этого:

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

?

+0

Да, это именно то, что я имел в виду. Спасибо! Но возможно ли получить совпадающие субъекты? –

+0

@AlexSorinDachin 'GROUP_CONCAT (distinct subject_id) как субъекты –

+0

@AlexSorinDachin Опять же, не уверен, что вы имеете в виду! – Strawberry

4

Что-то вроде следующего, я думаю, делаю то, что вы хотите, хотя я не совсем понимаю, что вы подразумеваете под «релевантностью»; это просто подсчитывает количество строк, которые соответствуют как пользователь и у 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.)

+0

Да, это то, что я считаю. Я использовал там неправильный термин. Благодаря! Но возможно ли получить совпадающие субъекты? –

+0

+1 Перемещение subject_id В проверке, чтобы предложение WHERE было хорошо здесь, я думаю! –

1

Ну, вы никогда не получите relevance из 2, потому что (subject_id LIKE 1) + (subject_id LIKE 2) вернет максимум 1.

Возможно, вам стоит пересмотреть ваш запрос.

+0

Если, конечно, он не добавляет GROUP BY и SUM() ... –

Смежные вопросы