【问题标题】:Show the data based on a foreign key根据外键显示数据
【发布时间】:2019-03-10 12:56:19
【问题描述】:

您之前发送的代码在我的系统上运行良好,因此我还在另一个模块中使用了它,管理员可以在其中查看也查看日期。但是我遇到了问题。

在这种情况下,第一个添加订单的用户,甚至下一个具有相同名称和部分的用户现在都被正确记录和保存。但是,问题是当记录完成时,它会显示记录的第一个订单的重复值。

  DATE   |   NAME   |   SECTION   |   PAYABLE   |   PRODUCT   |   QUANTITY
10/04/18 |   User1  |  Section 1  |     990     |  Magic Mug  |      3
                                                |   T-shirt   |      3
10/04/18 |   User1  |  Section 1  |     630     |  Magic Mug  |      3
                                                |   Thumbler  |      2
10/04/18 |   User1  |  Section 1  |     990     |  Magic Mug  |      3
                                                |   T-shirt   |      3

这是我使用的 PHP 代码,我只在您的代码中添加了日期。

$last_date = NULL;
$last_name = NULL;
$last_section = NULL;
$last_payable = NULL;

while ($row = mysql_fetch_array($result)) {
    $date = "";
    $name = "";
    $section = "";
    $payable = "";
    if ($last_name === NULL || $last_date != $row['date'] ||
        $last_name != $row['name'] ||
        $last_section != $row['section'] ||
        $last_payable != $row['payable']) {

        $last_date = $row['date'];
        $last_name = $row['name'];
        $last_section = $row['section'];
        $last_payable = $row['payable'];
        $date = $row['date'];
        $name = $row['name'];
        $section = $row['section'];
        $payable = $row['payable'];
    }
    echo '<tr style="text-align:center;">';
    echo '<td>'.$date.'</td>';
    echo '<td>'.$name.'</td>';
    echo '<td>'.$section.'</td>';
    echo '<td>'.$payable.'</td>';
    echo '<td>'.$row['product'].'</td>';
    echo '<td>'.$row['qty'].'</td>';
    echo '</tr>';
}

【问题讨论】:

标签: php mysql sql html-table


【解决方案1】:

您的预期输出表明,当这三个值之一发生变化时,我们应该显示一次名称、部分和应付值。所以我们可以稍微修改给your previous question的答案,在迭代结果集的同时保持这三列的状态。

$last_date = NULL;
$last_name = NULL;
$last_section = NULL;
$last_payable = NULL;

while ($row = mysql_fetch_array($result)) {
    $date = "";
    $name = "";
    $section = "";
    $payable = "";
    if ($last_name === NULL ||
        $last_date != $row['date'] ||
        $last_name != $row['name'] ||
        $last_section != $row['section'] ||
        $last_payable != $row['payable']) {

        $last_date = $row['date'];
        $last_name = $row['name'];
        $last_section = $row['section'];
        $last_payable = $row['payable'];
        $date = $row['date'];
        $name = $row['name'];
        $section = $row['section'];
        $payable = $row['payable'];
    }
    echo '<tr style="text-align:center;">';
    echo '<td>'.$date.'</td>';
    echo '<td>'.$name.'</td>';
    echo '<td>'.$section.'</td>';
    echo '<td>'.$payable.'</td>';
    echo '<td>'.$row['product'].'</td>';
    echo '<td>'.$row['qty'].'</td>';
    echo '</tr>';
}

【讨论】:

  • 您好 @Tim 先生。我使用了这段代码,它再次完美运行。但是,我在我的一个模块中使用它时遇到了一个问题,该模块有一个附加列。我发布了这个问题。希望这次你能再次帮助我。谢谢。
  • 问题仍然存在 @Tim 先生。添加的第一个数据是重复的。
  • 您的预期输出意味着只要日期、名称、部分或应付列之一具有新值,就会开始一个新组。我的回答应该涵盖这一点。我无法调整我的答案,因为我没有看到任何应该失败的数据。
  • 您的答案现在有效,@Tim 先生。不知道前段时间系统是怎么回事。谢谢!
  • 嗨,@Tim 先生,有没有办法只获取从现在到过去 5 天的数据?我应该使用什么查询?谢谢。
【解决方案2】:

问题不在您的查询中。我检查了问题在您的逻辑中,您将其放入 while 循环以打印值。 可能存在多个用户的用户名相同的情况。因此您可以使用confirmation,这对于每个订单都是唯一的。

$result = mysql_query("
    SELECT reservation.firstname, reservation.lastname, reservation.payable, reservation.floor, reservation.section, orders.product, orders.qty, reservation.date, orders.confirmation
    FROM orders
    INNER JOIN reservation
    ON orders.confirmation = reservation.confirmation 
    WHERE reservation.date = CURDATE() && reservation.floor = '23rd Floor'
    ");

$last_confirmation_seen = NULL;

while ($row = mysql_fetch_array($result)) {
    $firstname = "";
    $lastname = "";
    $section = "";
    $payable = "";
    if ($last_confirmation_seen === NULL || $row['confirmation'] != $last_confirmation_seen) {
        $last_confirmation_seen = $row['confirmation'];
        $firstname = $row['firstname'];
        $lastname = $row['lastname'];
        $section = $row['section'];
        $payable = $row['payable'];
    }
    echo '<tr style="text-align:center;">';
    echo '<td>'.$firstname.' '.$lastname.'</td>';
    echo '<td>'.$section.'</td>';
    echo '<td>'.$payable.'</td>';
    echo '<td>'.$row['product'].'</td>';
    echo '<td>'.$row['qty'].'</td>';
    echo '</tr>';
}

试试这个,我想这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 2013-08-28
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2019-07-31
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多