Php 显示基于外键的数据

Php 显示基于外键的数据,php,mysql,sql,html-table,Php,Mysql,Sql,Html Table,您不久前发送的代码在我的系统上运行得非常好,因此我还在另一个模块中使用了它,管理员可以在其中查看日期。但是我遇到了问题 在这种情况下,首先添加订单的第一个用户,甚至是具有相同名称和部分的下一个用户,现在都被正确地记录和保存。但是,问题是当记录完成时,它会显示记录的第一个订单的重复值 DATE | NAME | SECTION | PAYABLE | PRODUCT | QUANTITY 10/04/18 | User1 | Section 1

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

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

  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>';
}
$last_date=NULL;
$last_name=NULL;
$last_section=NULL;
$last_payment=NULL;
while($row=mysql\u fetch\u数组($result)){
$date=“”;
$name=“”;
$section=“”;
$应付=”;
如果($last_name==NULL | |$last_date!=$row['date']||
$last_name!=$row['name']||
$last_section!=$row['section']||
$last_payment!=$row['payment']){
$last_date=$row['date'];
$last_name=$row['name'];
$last_section=$row['section'];
$last_Payment=$row[‘Payment’];
$date=$row['date'];
$name=$row['name'];
$section=$row['section'];
$应付=$行[“应付”];
}
回声';
回显“.$date.”;
回显“.$name.”;
回显“.$section.”;
回音“.$应付”;
回显'.$row['product'].';
回显“.$row['qty']”;
回声';
}

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

$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>';
}
$result=mysql\u查询(“
选择reservation.firstname、reservation.lastname、reservation.payment、reservation.floor、reservation.section、orders.product、orders.qty、reservation.date、orders.confirmation
从命令
内部联接保留
ON orders.confirmation=reservation.confirmation
其中reservation.date=CURDATE()&&reservation.floor='23th floor'
");
$last\u confirmation\u seen=NULL;
while($row=mysql\u fetch\u数组($result)){
$firstname=“”;
$lastname=“”;
$section=“”;
$应付=”;
if($last_confirmation_seen==NULL | |$row['confirmation']!=$last_confirmation_seen){
$last_confirmation_seen=$row['confirmation'];
$firstname=$row['firstname'];
$lastname=$row['lastname'];
$section=$row['section'];
$应付=$行[“应付”];
}
回声';
回显“.$firstname.”.$lastname.”;
回显“.$section.”;
回音“.$应付”;
回显'.$row['product'].';
回显“.$row['qty']”;
回声';
}

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

您的预期输出建议,当这三个值中的一个发生变化时,我们应该显示名称、节和应付款值一次。因此,我们可以稍微修改给出的答案,以在迭代结果集时维护这三列的状态

$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>';
}
$last_date=NULL;
$last_name=NULL;
$last_section=NULL;
$last_payment=NULL;
while($row=mysql\u fetch\u数组($result)){
$date=“”;
$name=“”;
$section=“”;
$应付=”;
如果($last_name===NULL||
$last_date!=$row['date']||
$last_name!=$row['name']||
$last_section!=$row['section']||
$last_payment!=$row['payment']){
$last_date=$row['date'];
$last_name=$row['name'];
$last_section=$row['section'];
$last_Payment=$row[‘Payment’];
$date=$row['date'];
$name=$row['name'];
$section=$row['section'];
$应付=$行[“应付”];
}
回声';
回显“.$date.”;
回显“.$name.”;
回显“.$section.”;
回音“.$应付”;
回显'.$row['product'].';
回显“.$row['qty']”;
回声';
}

Duplicate:预期输出表中可能重复的列/数据名与PHP代码不一致。我将要求你修正你的问题,以便一切都一致。Sir@TimBiegeleisen PHP代码现在已经修改。代码仍然与表不同步。嗨,Sir@Tim。我使用了这个代码,它再次完美地工作。然而,在我的一个模块中使用它时遇到了一个问题,该模块有一个附加列。我把问题贴出来了。希望这次你能再次帮助我。谢谢。问题仍然存在,先生@Tim。添加的第一个数据是重复的。您的预期输出意味着只要日期、名称、节或应付款列中的一个列具有新值,新组就会开始。我的回答应该包括这一点。我无法调整我的答案,因为我看不到任何应该失败的数据。您的答案现在起作用了,先生@Tim。我不知道刚才这个系统是怎么回事。非常感谢。嗨,先生@Tim有没有办法只获取从现在到过去5天的数据?我应该使用什么查询?非常感谢。