[英]SELECT sql statement that retrieves one row from a table and many related rows from other table
[英]Select one row from one table and multiple rows from other table
我前些时候问过,但是我发现我的问题太糟糕了,以至于它实际上并没有帮助我做我想做的事情,因此我删除了它,然后再试一次。
我的数据库中有一个名为'game'的表格,其列为:k1,k1r,k2,k2r,k3,k3r,grp和week。 星期栏会与一年中的星期自动插入,其他的则是我制作的下注游戏的用户输入。
然后,我有了一个名为“ matches”的表,其中包含以下列:match1,match2,match3,grp,week。 再次,与周栏相同的步骤。 其他4个我应该下注的比赛,请填写。 我两个人的“ grp”列都用“ BS”和“ VF”填充。
然后我有一个查询:
SELECT *
FROM game
WHERE week = '.$week.' AND grp = 'bs';
$week
已设置为$week = Date('W');
它输出一个表格,我将比赛分成三列,然后在比赛下的行中回显用户的下注。 但是,我不想每次都有新的匹配项时都更改php-script,而是希望从表“ matches”中获取它们。 这样,我还将旧的匹配项保留在数据库中。
所以,现在我的问题:)
我想做的是这样的:
'SELECT * FROM game WHERE week = '.$week.' AND grp = 'bs'
JOIN * FROM matches WHERE week = '.$week.' AND grp = 'bs';
但是就像你现在可能的那样,这是行不通的:/
在我的另一个问题中,我忘了提到“ grp”列,却不知道如何插入。
为了回显它,我使用了:
while ($row = mysqli_fetch_array($query)) {
$no = 1;
$amount = $row['amount'] == 0 ? '' : number_format($row['amount']);
echo '<tr>
<td><strong>'.$row['name'].'</strong></td>
<td>'.$row['k1']."<br />".$row['k1r'].'</td>
<td>'.$row['k2']."<br />".$row['k2r'].'</td>
<td>'.$row['k3']."<br />".$row['k3r'].'</td> }
但我想要这样的结果:
| |Match1 |Match2 |Match3 |
|User1 |2-0 |2-1 |2-2 |
|User2 |1-1 |2-2 |1-2 |
依此类推...从“比赛”表中选择“比赛”,并从“游戏”表中选择赌注。 因此,我只需要“比赛”中的一行作为标题,然后在“游戏”中的各行之间循环。
创建的是:
CREATE TABLE `game`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) DEFAULT NULL,
`user` varchar(20) COLLATE utf8_danish_ci DEFAULT NULL,
`name` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
`k1` varchar(1) COLLATE utf8_danish_ci DEFAULT NULL,
`k1r` varchar(10) COLLATE utf8_danish_ci DEFAULT NULL,
`k2` varchar(1) COLLATE utf8_danish_ci DEFAULT NULL,
`k2r` varchar(10) COLLATE utf8_danish_ci DEFAULT NULL,
`k3` varchar(1) COLLATE utf8_danish_ci DEFAULT NULL,
`k3r` varchar(10) COLLATE utf8_danish_ci DEFAULT NULL,
`week` int(2) DEFAULT NULL,
`grp` varchar(11) COLLATE utf8_danish_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_index` (`uid`,`week`,`grp`)
) ENGINE=MyISAM AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci
和:
CREATE TABLE `udvalgte_kampe`
(
`hold1` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
`hold2` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
`hold3` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
`hold4` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
`hold5` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
`hold6` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
`week` int(2) DEFAULT NULL,
`grp` varchar(11) COLLATE utf8_danish_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci
但是我该怎么办?
请注意使用$ var进行SQL注入,并且可以避免使用正确的引号进行字符串连接。
您的第二个查询联接的sintax是错误的,则应使用此sintax
"SELECT * FROM game
JOIN matches on game.week = matches.week
where WHERE game.week = '$week' AND game.grp = 'bs'";
并不是
'SELECT * FROM game WHERE week = '.$week.' AND grp = 'bs'
JOIN * FROM matches WHERE week = '.$week.' AND grp = 'bs';
如果您使用上一个答案中的SQL,我认为这大致就是您在PHP中所需的:
$headerPrinted = $false;
while ($row = mysqli_fetch_array($query)) {
if (!headerPrinted) {
echo '<th>
<td></td>
<td>'.$row['hold1'].'</td>
<td>'.$row['hold2'].'</td>
<td>'.$row['hold3'].'</td>
</th>';
$headerPrinted = $true;
}
$no = 1;
$amount = $row['amount'] == 0 ? '' : number_format($row['amount']);
echo '<tr>
<td><strong>'.$row['name'].'</strong></td>
<td>'.$row['k1']."<br />".$row['k1r'].'</td>
<td>'.$row['k2']."<br />".$row['k2r'].'</td>
<td>'.$row['k3']."<br />".$row['k3r'].'</td>';
}
我假设hol1,hold2和hold3是要用于标题的列。
我并不是说这是实现所需目标的最佳方法,但对于您目前的经验水平来说可能已经足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.