php - Mysql/PHP - 在 php 中显示 group_concat 值
问题描述
在我目前正在完成的一个小项目中,我在 Mysql 数据库中有三个表。
一张表(主表)包含有关比赛名称、运动等的信息。
另一个表(频道)包含频道信息,例如名称和链接。
最终表(多通道)包含两个外键,它们链接到其他表字段(来自通道表的 channelid)和(来自主表的 eventid)。
比赛/事件和频道之间的关系是一场比赛可以在许多频道上。
为了清楚起见,下面是我在数据库中设置的表的导出。
-- Adminer 4.7.5 MySQL dump
SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
DROP TABLE IF EXISTS `channels`;
CREATE TABLE `channels` (
`channelid` int(2) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`link` varchar(100) NOT NULL,
PRIMARY KEY (`channelid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `channels` (`channelid`, `name`, `link`) VALUES
(1, 'Turkmenistan Sport', 'turkmensport.php'),
(2, 'Sportitalia', 'sportitalia.php'),
(3, 'CBC Sport', 'cbcsport.php'),
(4, 'TVM1', 'tvm1.php');
DROP TABLE IF EXISTS `main`;
CREATE TABLE `main` (
`eventid` int(3) NOT NULL,
`event` varchar(150) NOT NULL,
`date` varchar(10) NOT NULL,
`time` varchar(5) NOT NULL,
`sport` varchar(25) NOT NULL,
`league` varchar(25) NOT NULL,
KEY `eventid` (`eventid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `main` (`eventid`, `event`, `date`, `time`, `sport`, `league`) VALUES
(1, 'Blackburn vs Leeds', '20/01/2020', '15:00', 'Football', 'English Championship'),
(2, 'Blackburn vs Aston Villa', '21/01/2020', '15:00', 'Football', 'FA Cup'),
(3, 'Blackburn vs Wolves', '22/01/2020', '15:00', 'Football', 'FA Cup');
DROP TABLE IF EXISTS `multichannels`;
CREATE TABLE `multichannels` (
`eventid` int(3) NOT NULL,
`channelid` int(3) NOT NULL,
KEY `channelid` (`channelid`),
KEY `eventid` (`eventid`),
CONSTRAINT `multichannels_ibfk_2` FOREIGN KEY (`channelid`) REFERENCES `channels` (`channelid`),
CONSTRAINT `multichannels_ibfk_3` FOREIGN KEY (`eventid`) REFERENCES `main` (`eventid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `multichannels` (`eventid`, `channelid`) VALUES
(1, 1),
(1, 2);
-- 2020-01-19 01:26:30
我的目标是能够通过多通道表中的两个或多个链接在 php 中回显一个匹配/事件详细信息。因此,我的目标是针对两个通道名称(基于多通道表中的通道标识回显),而不是为相同的匹配设置两个单独的条目,唯一的区别是链接字段。
为此,我尝试了下面的 group_concat 查询:
SELECT GROUP_CONCAT(multichannels.channelid)
FROM multichannels
INNER JOIN main ON multichannels.eventid=main.eventid
INNER JOIN channels ON multichannels.channelid=channels.channelid
GROUP BY event, time, sport;
运行此查询会输出特定 eventid 的两个 channelid。
我遇到的问题是如何将每个频道的名称作为 php 中的链接回显?
我研究过可以使用explode功能,但我不确定如何获取要显示的通道名称才能使用此功能。
我当前的 php 代码是
$query = "SELECT f.event, f.date, f.time, f.sport, f.league, x.name, x.link
FROM main f
LEFT JOIN channels x
ON x.channelid=f.channelid
GROUP BY f.event, f.date, f.time, f.sport, f.league, x.channelid, x.name, x.link";
$stmt = $DBcon->prepare($query);
$stmt->execute();
?>
<thead>
<tr>
<th>Match/Event</th>
<th>Date </th>
<th>Time (GMT)</th>
<th>Sport</th>
<th> Link</th>
</tr>
</thead>
<?php
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$match= $row['event'];
$sport= $row['sport'];
$date= $row['date'];
$time= $row['time'];
$link= $row['link'];
$channelid= $row['channelid'];
$name=$row['name'];
?>
<tbody>
<tr>
<td data-label="Match/Event" style="font-weight:bold;"><?php echo $row["event"]; ?></td>
<td data-label="Date"><?php echo $row["date"]; ?></td>
<td data-label="Time (GMT)"><?php echo $row["time"]; ?></td>
<td data-label="Sport"><?php echo $row["sport"]; ?></td>
<td data-label="Link"><a href="https://gbcltd.club/fta/channels/<?php echo $row["link"];?>"> <?php echo $row["name"]; ?></a></td>
</tr>
<?php
}
?>
提前感谢任何人都可以提供的任何指导。
解决方案
推荐阅读
- python - 在 Apache 上托管 Django
- python - 在时间戳上插入数据和条件 - Pandas Python
- java - 当用户在询问名称时输入“退出”时如何结束循环?
- python - Python RegEx 从语音到文本生成的字符串中删除社会保险号
- jquery - 我如何制作一个打开关闭 jquery 按钮?
- c++ - 运算符 << 分段错误
- r - 在 R 中创建具有数组事件计数的数组
- orchardcms - 如何强制为现有内容项创建新的 ContentPartRecords?
- mongodb - MongoDB 的 Spring Boot Micrometer 指标
- kubernetes - Kubernetes:在集群中创建的 ClusterRole 在 rbac 检查期间不可见