2012-01-07 3 views
2

Скажем, мы имеем следующие Mysql таблицы:Mysql получить только определенные значения из п: п отношение

пользователь:

userID | user_name 

классификация:

classificationID | classification_name | classification_ponder 

user_classification:

userId(PK) | classificationId(PK) 

Это отношение n: n между пользователем и классификацией.

Меня интересует, как запросить каждый пользователь, ВСЕ классификации с самым большим обдумыванием в одном столбце, разделенные ,?

E.g. пусть говорят, что мы имеем user1 с ID = 1 и следующие классификации:

classificationId | classification_name | classification_ponder 
--------------------------------------------------------------- 
     1     class1      5 
     2     class2      5 
     3     class3      4 
     4     class4      2 

user_classification таблица является (пользователь имеет все классификации):

userId | ClassificationId 
--------------------------- 
    1   1 
    1   2 
    1   3 
    1   4 

То, что я хочу, чтобы это:

userId | user_name | class1, class2 

Так что только названия классификации с наибольшим обдумыванием (в данном случае class1 и class2) отображаются в одном столбце, разделенном «,».

мне удалось получить все классификации для пользователя со следующими MySQL запросов:

select 
    user.user_name, 
    GROUP_CONCAT(DISTINCT Classification.classification_name) as Classification 
from user 
left join user_classification 
    on (user_classification.userId=user.userID) 
left join Classification 
    on (Classification.classificationID=user_classification.classificationId) 
GROUP BY user.userID</b> 

Что я хочу сделать дисплей только классификации с самой большой Ponder.

ответ

0
SELECT 
    u.user_name, 
    GROUP_CONCAT(DISTINCT c.classification_name) as Classification 
FROM `user` u 
INNER JOIN 
(
    SELECT 
     user_classification.userId as uid, 
     MAX(classification.classification_ponder as max_ponder 
    FROM user_classification 
    INNER JOIN classification ON user_classification.classificationId = classification.classificationID 
    GROUP BY user_classification.userId 
) as user_max ON u.userID = user_max.uid 
LEFT JOIN user_classification uc ON u.userID = uc.userId 
LEFT JOIN classification c ON uc.classificationId = c.classificationID AND user_max.max_ponder = c.classification_ponder 
GROUP BY u.userID 

Что-то вроде этого следует сделать трюк (может иметь некоторые синтаксические ошибки)

+0

Это будет делать трюк. Спасибо! – iceDice

+0

приветствуются – frail

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