2015-10-06 75 views
1

有此代码可以从数据库生成多个表。问题是,不知道如何关闭表,因为我有一些规则,我的PHP里面有if和elsewhile循环和html表

<?php 
mysql_connect("localhost","root",""); 
mysql_select_db('test'); 


$barcode_cliente='1111111111111'; 

$sql="SELECT ora, prezzo, data, prodotto, SUM(quantita) as QtyTotal, SUM(totale_parziale) as Sumtotale_parziale 
FROM barcode_consumazioni 
GROUP BY 
ora, data, prodotto"; 
$result=mysql_query($sql); 
$dates_precedente = NULL; 
while($row=mysql_fetch_array($result)){ 
$dates="Ordine del ".$row["data"]." delle ore ".$row["ora"]; 
if ($dates === $dates_precedente) { 
echo '<tr> 
     <td>'.$row["prodotto"].'</td> 
     <td> x'.$row["QtyTotal"].'</td> 
     <td>'.number_format($row["prezzo"],2,",",".").' &euro;</td> 
     <td>'.number_format($row["Sumtotale_parziale"],2,",",".").' &euro;</td> 
    </tr>'; 
} 
else 
{ 
echo '<table style="text-align:center; margin-top:20px;" align="center" cellpadding="5"> 
<caption><u><b>'.$dates.'<b/></u><br /></caption> 
<thead style="background-color:#EBE9E9"> 
    <tr > 
     <th scope="col">Prodotto</th> 
     <th scope="col">Quantit&agrave;</th> 
     <th scope="col">Prezzo</th> 
     <th scope="col">Totale parziale</th> 
    </tr> 
</thead> 
<tbody style="background-color:F5FFFF"> 
    <tr> 
     <td>'.$row["prodotto"].'</td> 
     <td> x'.$row["QtyTotal"].'</td> 
     <td>'.number_format($row["prezzo"],2,",",".").' &euro;</td> 
     <td>'.number_format($row["Sumtotale_parziale"],2,",",".").' &euro;</td> 
    </tr> 
</tbody></table>'; 
} 

$dates_precedente = $dates; 

} 

?> 

现在的问题是,如果日期是独一无二的,我可以关闭表,但如果$日期不唯一,则会生成其他行。我试图找到说规则,当$日期=== $ dates_precedente,它是最后一个,所以你可以也把</tbody></table>

+0

但它必须产生一些表不是一个 – cicciopasticcio

+0

目前还不清楚你想要什么,你能吐出结果你正在寻找? – Demodave

回答

1

试试这个:

$dates_precedente = NULL; 
    echo "<table>"; 
    while($row=mysql_fetch_array($result)){ 
     $dates="Ordine del ".$row["data"]." delle ore ".$row["ora"]; 
     if ($dates === $dates_precedente) { 
      echo '<tr>....</tr>'; 
     } 
     else 
     { 
      echo '</table><table><tr>...</tr>'; 
     } 
    } 
    echo "</table>"; 

这仅关闭当前表$dates != $dates_precedente,然后启动一个新表(不像你在例子中那样关闭它)。然后,在循环完成后,您必须关闭当前表格。

+0

完美!非常感谢! – cicciopasticcio

0

我建议你使用mysqli_ *函数或PDO因为mysql_ *函数弃用(Why shouldn't I use mysql_* functions in PHP?)。此外,请关注MySQL和GROUP BY关于选择未在GROUP BY(https://dev.mysql.com/doc/refman/5.1/en/group-by-handling.html)中命名的非聚集列的信息。

相结合,与已经@Tomas Ceruti提供的解决方案,您可以使用以下方法:

$connection = mysqli_connect('localhost', 'root', 'your_password', 'your_database'); 
mysqli_set_charset($connection, 'utf8'); 
if (!$connection) { 
    die("Database connection failed: " . mysqli_error()); 
} 

$barcode_cliente = '1111111111111'; 

$sql = " 
    SELECT ora, prezzo, data, prodotto, SUM(quantita) as QtyTotal, SUM(totale_parziale) as Sumtotale_parziale 
    FROM barcode_consumazioni 
    GROUP BY 
    ora, data, prodotto"; 
$result = mysqli_query($connection, $sql); 
if(!$result) { 
    die("SQL Error: " . mysqli_error($connection); 
} 

$dates_precedente = NULL; 
while ($row = mysqli_fetch_array($result)) { 
    $dates = "Ordine del ".$row["data"]." delle ore ".$row["ora"]; 
    if ($dates === $dates_precedente) { 
     echo ' 
     <tr> 
      <td>'.$row["prodotto"].'</td> 
      <td> x'.$row["QtyTotal"].'</td> 
      <td>'.number_format($row["prezzo"],2,",",".").' &euro;</td> 
      <td>'.number_format($row["Sumtotale_parziale"],2,",",".").' &euro;</td> 
     </tr>'; 
    } else { 
     echo ' 
      </tbody> 
     </table> 
     <table style="text-align:center; margin-top:20px;" align="center" cellpadding="5"> 
      <caption><u><b>'.$dates.'<b/></u><br /></caption> 
      <thead style="background-color:#EBE9E9"> 
       <tr > 
        <th scope="col">Prodotto</th> 
        <th scope="col">Quantit&agrave;</th> 
        <th scope="col">Prezzo</th> 
        <th scope="col">Totale parziale</th> 
       </tr> 
      </thead> 
      <tbody style="background-color:F5FFFF"> 
       <tr> 
        <td>'.$row["prodotto"].'</td> 
        <td> x'.$row["QtyTotal"].'</td> 
        <td>'.number_format($row["prezzo"],2,",",".").' &euro;</td> 
        <td>'.number_format($row["Sumtotale_parziale"],2,",",".").' &euro;</td> 
       </tr>'; 
    } 
    $dates_precedente = $dates; 
}