Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql/PHP-在PHP中显示组值_Php_Mysql - Fatal编程技术网

Mysql/PHP-在PHP中显示组值

Mysql/PHP-在PHP中显示组值,php,mysql,Php,Mysql,在我目前正在完成的一个小项目中,Mysql数据库中有三个表 一个表(主)包含关于比赛名称、运动项目等的信息 另一个表(通道)包含通道信息,如名称和链接 最终表(多通道)包含两个外键,它们链接到其他表字段(通道表中的channelid)和(主表中的eventid) 匹配/事件和通道之间的关系是一个匹配可以在多个通道上进行 下面是为了清晰起见,我在数据库中设置的表的导出 -- Adminer 4.7.5 MySQL dump SET NAMES utf8; SET time_zone = '+00

在我目前正在完成的一个小项目中,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中使用多通道表中的两个或多个链接回显一个匹配/事件细节。因此,我的目标不是为相同的匹配设置两个单独的条目,唯一的区别是链接字段,而是为两个通道名称(基于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中解析数据之前对其进行分组-除非在同一查询中有其他聚合函数。无论如何,有关进一步的帮助,请参阅(即,向我们显示所需的结果)