【问题标题】:MySQL Multiple table data selectionMySQL多表数据选择
【发布时间】:2017-01-26 12:48:32
【问题描述】:

我有两张表我正在尝试加入,第一张表存储与高尔夫球手相关的信息以及他们在各种锦标赛中的得分(每个锦标赛都有一个新表,结构相同),第二张表已满他们为每场比赛挑选的用户和 5 名高尔夫球手:

表1(MField):

+---------------+------+------+----+------+------+
| MGolf         | Rd1P | Rd2P | CP | Rd3P | Rd4P |
| Jason Day     | 0    | -1   | 5  | 2    | -1   |
| Jordan Spieth | 6    | -2   | 5  | -1   | -1   |
| Rory McIlroy  | 2    | 1    | 5  | -5   | 3    |
+---------------+------+------+----+------+------+

表 2(名册):

+-------+---------------+
| User  | GName         |
| User1 | Jason Day     |
| User1 | Jordan Spieth |
| User1 | Rory McIlroy  |
+-------+---------------+

我的理想输出是:

+---------------+------+------+----+------+------+
| User1         | Rd1P | Rd2P | CP | Rd3P | Rd4P |
| Jason Day     | 0    | -1   | 5  | 2    | -1   |
| Jordan Spieth | 6    | -2   | 5  | -1   | -1   |
| Rory McIlroy  | 2    | 1    | 5  | -5   | 3    |
+---------------+------+------+----+------+------+

我看到的是:

+---------------+-----+-----+-----+-----+-----+
| User1         | Rd1 | Rd2 | Cut | Rd3 | Rd4 |
| Jason Day     | 0   | -1  | 5   | 2   | -1  |
| User1         | Rd1 | Rd2 | Cut | Rd3 | Rd4 |
| Jordan Spieth | 6   | -2  | 5   | -1  | -1  |
| User1         | Rd1 | Rd2 | Cut | Rd3 | Rd4 |
| Rory McIlroy  | 2   | 1   | 5   | -5  | 3   |
+---------------+-----+-----+-----+-----+-----+

我正在使用以下查询:

$sql = "
SELECT 
    User,
    GName,
    MGolf,  
    Rd1P,
    Rd2P,
    CP,
    Rd3P,
    Rd4P
FROM 
    Rosters, 
    MField
WHERE 
    roster.GName = MGolf 
";

$result = $link->query($sql);

echo '<table>';

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo '<tr><td>' . $row['User'] . '</td><td>Rd1</td><td>Rd2</td><td>Cut</td><td>Rd3</td><td>Rd4</td></tr>';
        echo '<tr><td>' . $row['GName'] . '</td><td>'.$row['Rd1P'].'</td><td>'.$row['Rd2P'].'</td><td>'.$row['CP'].'</td><td>'.$row['Rd3P'].'</td><td>'.$row['Rd4P'].'</td></tr>'; 
    }
} else {
    echo "0 results";
}
echo '</table>';

我遇到的问题是我只想显示一次“用户”名称,但它目前正在交替显示表中的每一行。我知道这是因为查询的结构如何,但我不知道如何显示“用户”一次,5 个高尔夫球手在他们下面的行中,然后是“MField”表中的高尔夫球手信息。有没有更简洁的方法来组合这些信息?

【问题讨论】:

  • 如果User 列对于不同的高尔夫球手不同怎么办?

标签: mysql join distinct union


【解决方案1】:

在您的循环中,只打印一次标题行。使用变量来跟踪它。

if ($result->num_rows > 0) {
    $header_printed = false;
    // output data of each row
    while($row = $result->fetch_assoc()) {
        if (!$header_printed) {
            echo '<tr><td>' . $row['User'] . '</td><td>Rd1</td><td>Rd2</td><td>Cut</td><td>Rd3</td><td>Rd4</td></tr>';
            $header_printed = true;
        }
        echo '<tr><td>' . $row['GName'] . '</td><td>'.$row['Rd1P'].'</td><td>'.$row['Rd2P'].'</td><td>'.$row['CP'].'</td><td>'.$row['Rd3P'].'</td><td>'.$row['Rd4P'].'</td></tr>'; 
    }
} else {
    echo "0 results"
}

【讨论】:

  • 非常接近,现在可以看到User1的初始header,但是无法获取后续用户。
  • 关于后续用户的问题中没有任何内容。您所有的玩家都有相同的User1。我问如果用户不同你想做什么,你没有回答。
  • 对不起,我刚刚看到了。我查看了您链接到我的帖子,我能够让它解决我的问题。感谢您的帮助!
  • 我不明白为什么聪明的人很难自己解决这个问题。如果您只想在更改时打印某些内容,只需记住变量中的旧值,并将其与新值进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2013-10-12
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多