2011-01-28 2 views
0

Спасибо всем вам за помощью на мою первую попыткуЗастрял снова - нужно добавить еще один GROUP_CONCAT для запроса MySQL

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

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

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_CONCATs, чтобы получить результат что-то вроде этого

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 

Который не то, что им после того, как:

+0

Подождите, что спортивное событие имеет Crisco как спонсор? – SeanDowney

ответ

0
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 
+0

Спасибо за быстрый ответ Quassnoi - это близко, но он возвращает неправильные значения тегов 1-1-11, Nike, 1, Bears vs Tigers, Rained out, Canceled, Away, Away 2-1-11, Crisco, 2, «Ламы против тигров», «Отброшено», «Отменено», «В гостях», «Нет» 1-1-11, Nike, 3, Earwigs vs Goombas, Rade out, Canceled, Away, Away , где теги для матча 1 должны быть «проиграны, отменены», и совпадение 2 должно быть «прочь» – dMO

+0

Спасибо за быстрый ответ Quassnoi - это близко, но он возвращает неправильные значения тегов ------------------------- --------------------- 1-1-11, Nike, 1, Медведи против Тигров, Окрашенные, Отменены, В гостях, В гостях 2-1-11, Криско , 2, Llamas vs Tigers, Rained out, Canceled, Away, Away 1-1-11, Nike, 3, Earwigs vs Goombas, Rained out, Canceled, Away, Away ------------- --------------------------------------- где теги для матча 1 должны быть «ra ined out, Canceled ", и матч 2 должен быть« прочь »- извините за форматирование – dMO

+0

@dMO: извините, забыли скорректировать подзапрос. Завтра нам придется запускать лишний «1,5» км, вот как я наказываю себя за то, что не коррелировал подзапросы. – Quassnoi

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