从一个表中选择一行,从其他表中选择多行

时间:2017-04-03 11:27:40

标签: php mysql

我之前问过,但我觉得我的问题很糟糕,实际上并没有帮助我做我想做的事情,所以我将其删除并再次尝试。

我的数据库中有一个名为' game'列:k1,k1r,k2,k2r,k3,k3r,grp和周。周列自动插入一年中的一周,其他的是用户输入的赌博游戏。

然后我有一张叫做“匹配”的桌子。列:match1,match2,match3,grp,week。同样,与周列相同的过程。其他4我填写了我们应该打赌的比赛。 ' grp'我用“BS'和' VF'。

然后我有一个查询:

SELECT * 
FROM game 
WHERE week = '.$week.' AND grp = 'bs';

$week已设为$week = Date('W');

它输出一个表格,在那里我将匹配项写入3列,然后在匹配项下的行中回显用户投注。但是,每次有新的比赛时我都不会改变php脚本,我希望它能从桌面上找到#match;#39;。这样,我还将旧匹配保留在数据库中。

所以,现在我的问题:)

我想做的是:

'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       |

等等......&#39;匹配&#39;从&#39;匹配&#39; -table中选择,投注从&#39;游戏&#39; -table中选择。所以我只需要来自&#39; Matches&#39;的一行。作为标题然后循环播放游戏&#39;

中的行

创作是:

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

但那我该怎么办?

2 个答案:

答案 0 :(得分:0)

请注意使用$ var进行sql注入,并且可以使用正确的引号来避免字符串连接。

你的第二个查询是sintax for join是 是不是你应该使用这个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';

答案 1 :(得分:0)

如果您使用上一个答案中的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是您要用于标题的列。

我不是说这是达到你想要的最佳方式,但它可能足以满足你目前的经验水平。