繁体   English   中英

从一个表中选择一行,从另一表中选择多个行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM