2013-09-08 2 views
0

Я хотел бы отобразить следующую базу данных в различных группах таблицы html по Comp.Результаты групп MYSQL и PHP по

 
TeamA   TeamB    Comp 
Kenya  Namibia  Africa World Cup - Qual 
Zimbabwe  Mozambique  Africa World Cup - Qual 
Coventry City Colchester Utd England - League One 
Bray Wanderers UCD League Of Ireland - Premier Division 
Dundalk Drogheda United League Of Ireland - Premier Division 

Пример таблицы 1

 
Comp: Africa World Cup - Qual 
Kenya  Namibia 
Zimbabwe Mozambique 

Пример таблицы 2

 
England - League One 
Coventry City Colchester Utd 

т.д.

Я попытался

SELECT GROUP_CONCAT(Comp) as Comp 
    FROM database 
Group By Comp` 

но не повезло.

+0

вы можете обновить таблицу и запросить здесь: http://sqlfiddle.com/ – imsyedahmed

+0

эй, что у вас есть вопрос! вы неверны, вы выбираете из таблицы не базу данных, и вы объединяете этот столбец, в который вы применили группу. – developerCK

+0

Вам нужно будет извлечь каждую строку из db, упорядочить по * comp * и добавить группировку с использованием php. Основной принцип [поясняется здесь] (http://www.dreamincode.net/forums/topic/96215-grouping-in-php-from-a-mysql-query-result/). –

ответ

2

Вы ищете это?

SELECT comp, 
     GROUP_CONCAT(CONCAT(TeamA, '|', TeamB)) details 
    FROM table1 
GROUP BY comp 

Выход:

 
+--------------------------------------+--------------------------------------------+ 
| comp         | details         | 
+--------------------------------------+--------------------------------------------+ 
| Africa World Cup - Qual    | Kenya|Namibia,Zimbabwe|Mozambique   | 
| England - League One     | Coventry City|Colchester Utd    | 
| League Of Ireland - Premier Division | Bray Wanderers|UCD,Dundalk|Drogheda United | 
+--------------------------------------+--------------------------------------------+ 

Вот SQLFiddle демо

При необходимости вы можете изменить разделители как в CONCAT() и GROUP_CONCAT() от запятой , и трубы | соответственно. Вы можете легко установить explode(), итерации по набору результатов.

Упрощенная PHP часть с помощью PDO может выглядеть следующим образом

$db = new PDO('mysql:host=localhost;dbname=test', 'user', 'userpwd'); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 


$sql = "SELECT comp, 
       GROUP_CONCAT(CONCAT(TeamA, '|', TeamB)) details 
       FROM table1 
     GROUP BY comp"; 

$query = $db->prepare($sql); 
$query->execute(); 
$rows = $query->fetchall(PDO::FETCH_ASSOC); 

$query = null; 
$db = null; 

foreach($rows as $row) { 
    echo $row['comp'] . '</br>'; 
    $details = explode(',', $row['details']); 
    foreach($details as $detail) { 
     list($teama, $teamb) = explode('|', $detail); 
     echo $teama . ' - ' .$teamb . '</br>'; 
    } 
    echo '</br>'; 
} 

Выход:

 
Africa World Cup - Qual 
Kenya - Namibia 
Zimbabwe - Mozambique 

England - League One 
Coventry City - Colchester Utd 

League Of Ireland - Premier Division 
Bray Wanderers - UCD 
Dundalk - Drogheda United 
+0

Спасибо, что мне нужно – meandme

0

Я думаю, что у вас есть проблема проектирования баз данных. Понимаю ли я, что ваш результат заключается в отображении игр в определенном соревновании? Итак, команда A играет против команды B в конкурсе C?

Вы должны создать более двух таблиц, которые я думаю.

  • Таблица A: содержит все ваши команды.
  • Таблица B, содержащая все соревнования (потому что, возможно, команда могла участвовать в более чем одном соревновании).
  • Таблица C, чтобы присоединиться к командам в соревнованиях.
  • Таблица D, чтобы провести игры в определенном конкурсе.

В таблице D мы связываем ссылки только из таблицы C. Причина состоит в том, чтобы не дать команде играть в соревновании, в котором он не участвует.

Итак:

Table A (Teams) contains columns (idTeam INT, Teamname VARCHAR 50) 
Table B (Competitions) contains columns (idComp INT, Competitionname VARCHAR 50) 
Table C (TeamCompetitions) contains columns (idTeam INT, idComp INT) 
Table D (Games) contains columns (idTeamCompA INT, idTeamCompB INT, idComp INT) 

Тогда запрос не так уж трудно:

SELECT 
    TeamA.Teamname as teamA, 
    TeamB.Teamname as teamB, 
    comp.Competitionname as competition 
FROM 
    Games 
    JOIN TeamCompetitions AS compTeamA ON compTeamA.idTeamCompetition = Games.idTeamCompA 
    JOIN Teams   AS TeamA  ON compTeamA.idTeam = TeamA.idTeam 
    JOIN TeamCompetitions AS compTeamB ON compTeamB.idTeamCompetition = Games.idTeamCompB 
    JOIN Teams   AS TeamB  ON compTeamB.idTeam = TeamB.idTeam 
    JOIN Competitions AS comp ON compTeamA.idCompetition = comp.idCompetition 

пример: команды

1 Zimbabwe 
2 Kenya 
3 AJAX 
4 Chelsea 
5 Feyenoord 
6 PEC Zwolle 

Соревнования

1 World Championship 2014 
2 Dutch Premier League 

TeamCompetitions

1 1 1 
2 1 1 
3 2 1 
4 3 1 
5 4 1 
6 3 2 
7 5 2 
8 6 2 

Игры

1 2 
2 3 
7 6 
7 8 

Выход запроса:

teamA teamB competition 
Zimbabwe Zimbabwe World Championship 2014 
Zimbabwe Kenya World Championship 2014 
Feyenoord AJAX Dutch Premier League 
Feyenoord PEC Zwolle Dutch Premier League 

Надежда это помогает!

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