0

我想通过 Comp 在各种 html 表组中显示以下数据库。

TeamA TeamB Comp
肯尼亚纳米比亚非洲世界杯 - 资格赛
津巴布韦莫桑比克非洲世界杯 - 资格赛
考文垂市科尔切斯特联英格兰 - 联赛第一
布雷流浪者 UCD 爱尔兰联赛 - 超级联赛
Dundalk Drogheda United League Of Ireland - Premier Division

示例表 1

比较:非洲世界杯 - 资格赛
肯尼亚 纳米比亚
津巴布韦 莫桑比克

示例表 2

英格兰 - 甲级联赛
考文垂市科尔切斯特联

等等

我试过

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

但没有运气。

4

2 回答 2

2

你在找这个吗?

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

输出:

+----------------------------+---------- ----------------------------------+
| 补偿 | 详情 |
+----------------------------+---------- ----------------------------------+
| 非洲世界杯 - 资格赛 | 肯尼亚|纳米比亚,津巴布韦|莫桑比克|
| 英格兰 - 甲级联赛 | 考文垂|科尔切斯特联|
| 爱尔兰联赛 - 超级联赛 | 布雷流浪者|UCD,邓多克|德罗赫达联|
+----------------------------+---------- ----------------------------------+

这是SQLFiddle演示

如果需要,您可以分别更改逗号CONCAT()和管道的分隔符。在迭代结果集时,您可以轻松地详细说明值。GROUP_CONCAT(),|explode()

使用 PDO 的简化 php 部分可能如下所示

$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>';
}

输出:

非洲世界杯 - 资格赛
肯尼亚 - 纳米比亚
津巴布韦 - 莫桑比克

英格兰 - 甲级联赛
考文垂 - 科尔切斯特联

爱尔兰联赛 - 超级联赛
布雷流浪者 - UCD
邓多克 - 德罗赫达联
于 2013-09-08T09:21:28.503 回答
0

我认为你有一个数据库设计问题。我是否理解您的输出是在某个比赛中展示游戏?那么A队在C比赛中对阵B队?

我认为您应该创建 2 个以上的表。

  • 表 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

团队竞赛

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

希望这可以帮助!

于 2013-09-08T09:42:15.200 回答