Mysql/PHP-在PHP中显示组值
在我目前正在完成的一个小项目中,Mysql数据库中有三个表 一个表(主)包含关于比赛名称、运动项目等的信息 另一个表(通道)包含通道信息,如名称和链接 最终表(多通道)包含两个外键,它们链接到其他表字段(通道表中的channelid)和(主表中的eventid) 匹配/事件和通道之间的关系是一个匹配可以在多个通道上进行 下面是为了清晰起见,我在数据库中设置的表的导出Mysql/PHP-在PHP中显示组值,php,mysql,Php,Mysql,在我目前正在完成的一个小项目中,Mysql数据库中有三个表 一个表(主)包含关于比赛名称、运动项目等的信息 另一个表(通道)包含通道信息,如名称和链接 最终表(多通道)包含两个外键,它们链接到其他表字段(通道表中的channelid)和(主表中的eventid) 匹配/事件和通道之间的关系是一个匹配可以在多个通道上进行 下面是为了清晰起见,我在数据库中设置的表的导出 -- Adminer 4.7.5 MySQL dump SET NAMES utf8; SET time_zone = '+00
-- 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中使用多通道表中的两个或多个链接回显一个匹配/事件细节。因此,我的目标不是为相同的匹配设置两个单独的条目,唯一的区别是链接字段,而是为两个通道名称(基于multichannels表中的ChannelID)设置回音
为此,我尝试了下面的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
}
?>
$query=“选择f.event、f.date、f.time、f.sport、f.league、x.name、x.link
从主f
左连接通道x
在x.channelid=f.channelid上
按f.event、f.date、f.time、f.sport、f.league、x.channelid、x.name、x.link分组”;
$stmt=$DBcon->prepare($query);
$stmt->execute();
?>
比赛/活动
日期
时间(格林尼治标准时间)
运动
链接
提前感谢任何人提供的指导。你是在谈论这个吗?
。看到你提到每行的超链接。有什么不符合你的要求?与期望的结果相比,你得到了什么结果?你当前的查询没有聚合功能。顺便说一句,在我看来,这几乎是反常的o在PHP中解析数据之前对其进行分组-除非在同一查询中有其他聚合函数。无论如何,有关进一步的帮助,请参阅(即,向我们显示所需的结果)