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

Posted

技术标签:

【中文标题】MySQL - 在一个字段中显示多行(具有内部连接的表)q【英文标题】:MySQL - Display multiple rows in one field (tables with inner joins)q 【发布时间】:2016-11-14 17:18:55 【问题描述】:

我有一个mysql数据库,里面有3张表,一张叫fixturechannels,一张叫footballfixtures,一张叫satellite。

基本上,satellite table 包含有关卫星频道的信息(name、country、channelid), 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 中为每个字段设置多个值。

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

【问题讨论】:

请在您的问题中以文本形式发布表格 sqlfiddle.com/#!9/51662/1 【参考方案1】:

在主队、客队和比赛中添加 group_by 以及频道的 GROUP_CONCAT 应该可以工作!

【讨论】:

感谢您的建议,我尝试了此代码,但出现语法错误,意外的 'GROUP' (T_STRING) 我尝试了代码"SELECT * GROUP_CONCAT(channelid) FROM fixturechannels INNER JOIN footballfixtures ON fixturechannels.matchid=footballfixtures.matchid INNER JOIN satellite ON fixturechannels.channelid=satellite.channelid" GROUP BY hometeam, awayteam, competition; 我想我没有正确完成此 group_concat 你需要删除 '*' "SELECT GROUP_CONCAT(channelid) FROM fixturechannels INNER JOIN footballfixtures ON fixturechannels.matchid=footballfixtures.matchid INNER JOIN satellite ON fixturechannels.channelid=satellite.channelid" GROUP BY hometeam,客队,比赛; 谢谢,我没有发现任何错误,但网站上不再显示任何数据,不能是查询错误,但不能正确检索信息。 sql 实际上看起来没问题,因为我在 sqlfiddle 中得到的结果没有问题,一定是我的表中的回显代码有问题? 您需要获取 select 中的所有详细信息以及 GROUP_CONCAT(channelid) .. GROUP_CONCAT(channelid)、matchid、hometeam 等

以上是关于MySQL - 在一个字段中显示多行(具有内部连接的表)q的主要内容,如果未能解决你的问题,请参考以下文章

在单个带中具有多行时拉伸数据溢出的行

Mysql - 连接 - 返回太多行 - 每个连接表一个,但不想要那个

将具有多行的一列旋转到一个连接的行

mysql中的多行查询结果合并成一个

是否可以从具有 SQL 和 mySql 中的数据库的内部连接中获取不同数据库的信息?

SSIS 在不使用 SQL 的情况下将多行合并并连接成单行