MySQL - 在一个字段中显示多行(具有内部连接的表)q

时间:2016-07-12 12:46:18

标签: mysql database inner-join group-concat

我有一个包含3个表的mysql数据库,一个表称为fixturechannels,一个称为footballfixtures,一个称为satellite。

卫星表基本上包含有关卫星频道(名称,国家,频道ID),footballfixtures包含(matchid,hometeam,awayteam,competition ....)的信息,而fixturechannels是一个包含(matchid和channelid,这些是分别通过卫星和足球装置表的外围钥匙链接。

以下是表格的进一步细节:

tablelayouts

我在下面使用了以下查询,并且它有效,我能够从表中回显我需要的细节

"SELECT * FROM fixturechannels INNER JOIN footballfixtures ON fixturechannels.matchid=footballfixtures.matchid INNER JOIN satellite ON fixturechannels.channelid=satellite.channelid";

用于回显细节的代码是:

 <tbody><tr>
            <th>Match ID</th>
            <th>Home Team</th>
            <th>Away Team</th>
            <th>Competition</th>
            <th>Date</th>
            <th>Time</th>
            <th>Channel ID</th>
            <th>Channel Name</th>


                </tr>
                <?php foreach ($results as $res) { ?>
                <tr>
               <td><?php echo $res["matchid"]; ?></td>
               <td><?php echo $res["hometeam"]; ?></td>
               <td><?php echo $res["awayteam"]; ?></td>
               <td><?php echo $res["competition"]; ?></td>
               <td><?php echo $res["date"]; ?></td>
               <td><?php echo $res["time"]; ?></td>
              <td><?php echo $res["channelid"]; ?></td>
              <td><?php echo $res["name"]; ?></td>
            </tr>

我的问题是比赛详情会显示两次 因为列出的两个频道显示相同的匹配(见图)

incorrectoutput

我想要的输出是让每个匹配的详细信息显示一次,显示匹配的多个频道的名称将显示在频道名称列中(没有多行)

我尝试使用GROUP_CONCAT,但没有成功,我尝试了GROUP_CONCAT,因为我知道不建议在MYSQL中每个字段有多个值。

非常感谢能够提供帮助或指导的任何人。

1 个答案:

答案 0 :(得分:0)

在HOME TEAM,AWAY TEAM和比赛中添加group_by以及频道的GROUP_CONCAT应该有效!