Застрял снова - нужно добавить еще один GROUP_CONCAT в запрос MySQL - PullRequest
0 голосов
/ 28 января 2011

Спасибо всем за помощь в моей первой попытке

Я пытаюсь добавить второй group_concat в запрос для возврата данных в сетку данных VB.Net.Я хочу свести результаты двух столбцов в новые столбцы, как показано ниже:

Существующие данные

Date     Sponsor    Match_no     Team      
--------------------------------------------
1-1-11     Nike        1         Tigers     
1-1-11     Nike        1         Bears
2-1-11     Crisco      2         Llamas
2-1-11     Crisco      2         Tigers 


 Date     Sponsor    Match_no     Tags    
    --------------------------------------------
    1-1-11     Nike        1         Away
    1-1-11     Nike        1         Rained out
    2-1-11     Crisco      2         Home
    2-1-11     Crisco      2         Injury

и свернуть оба столбца с помощью GROUP_CONCAT, чтобы получить результат, подобный этому

 Date     Sponsor    Match_no     Teams_playing         Tags
    ----------------------------------------------------------------
    1-1-11    Nike         1          Tigers vs Bears       Away, Rained Out
    2-1-11    Crisco       2          Llamas vs Tigers      Home, injury

Я взял здесь чей-то совет и создал таблицы соединений для Team_matches и Matches_tags

Теперь есть 7 таблиц:

Dates       Sponsors       Match        Team         Tags   matches_tags  team_matches 
 -------------------------------------------------------------------------------------- 
Date_id     Sponsor_id     Match_id      Team_id    Tag_id     Match_id      Team_id
Date        Sponsor_name   Match_no     Team_name   Tag_name   Tag_id        Match_id 
             date_id        sponsor_id 

На данный момент мой запрос:

select d.date, s.sponsor_name, m.match_no,   
group_concat(t.team_name separator ' vs ') Teams_playing, 
group_concat(tg.tag_name separator ' , ') Comments
from matchs m 
inner join matches_teams mte on mte.match_id = m.match_id
inner join matches_tags mta on mta.match_id = m.match_id
inner join team t on t.team_id = mte.team_id
inner join tags tg on tg.tag_id = mta.tag_id
inner join sponsors s on s.sponsor_id = m.sponsor_id
inner join dates d on d.date_id = s.date_id 
group by m.match_id, d.date, s.sponsor_name, m.match_no, tg.tag_id

и возвращает результаты:

date    sponsor      match_no        teams playing    comments
--------------------------------------------------------------------
1-1-11   Nike           1          Bears vs Tigers    Rained out , Rained out 
1-1-11   Nike           1          Bears vs Tigers    Cancelled , Cancelled
1-1-11   Nike           3          Earwigs vs Goombas Away , Away
2-1-11   Crisco         2          Tigers vs Llamas   Away , Away

Это не то, что я после:

1 Ответ

0 голосов
/ 28 января 2011
SELECT  d.date, s.sponsor_name, m.match_no,   
        GROUP_CONCAT(t.team_name separator ' vs ') Teams_playing, 
        (
        SELECT  GROUP_CONCAT(tg.tag_name SEPARATOR ', ')
        FROM    matches_tags mta
        JOIN    tags tg
        ON      tg.tag_id = mta.tag_id
        WHERE   mta.match_id = m.match_id
        ) AS comments
FROM    matchs m 
JOIN    matches_teams mte on mte.match_id = m.match_id
JOIN    team t on t.team_id = mte.team_id
JOIN    sponsors s on s.sponsor_id = m.sponsor_id
JOIN    dates d on d.date_id = s.date_id 
GROUP BY
        m.match_id
...