简体   繁体   English

PHP 从具有相同 ID 的记录中显示表

[英]PHP show table from record with same id

I want to return to the user a table that shows his orders but when a user orders one product the table is ok but in the moment that orders 2 product they get 2 lines with the same ID but different ProductID same total price.我想向用户返回一个显示他的订单的表格,但是当用户订购一个产品时,该表格还可以,但是在订购 2 个产品的那一刻,他们得到 2 行具有相同 ID 但不同 ProductID 的总价相同。

在此处输入图像描述

$email = strval($_SESSION["email"]); 
$TabellaOrdini = "SELECT DISTINCT ordini.IDOrdini, clienti.Indirizzo,       
                        clienti.Nome, clienti.Cognome, ordini.StatoConsegna, 
                        prodotti.Descrizione, ordini.TotaleOrdine, 
                        pacco.IDProdotti, pacco.Quantita
                FROM (((clienti NATURAL JOIN ordini) 
                    JOIN pacco ON ordini.IDPacco = pacco.IDPacco) 
                    JOIN prodotti ON pacco.IDProdotti = prodotti.IDProdotti)
                WHERE  clienti.IDClienti = ordini.IDClienti  
                AND clienti.Email = '$email' 
                ORDER BY ordini.IDOrdini";

$CheckOrdini =   "SELECT insertphpordini.IDOrdini, 
                    concat(insertphpordini.Descrizione,' x ',insertphpordini.Quantita) AS Risultato
                FROM insertphpordini
                WHERE insertphpordini.Email = '$email' 
                AND insertphpordini.IDOrdini IN
                    ( SELECT insertphpordini.IDOrdini 
                      FROM insertphpordini
                      GROUP BY insertphpordini.IDOrdini
                      HAVING COUNT(IDOrdini)>1
                    )";

$result = $conn -> query($TabellaOrdini);

$result2 = $conn -> query($CheckOrdini);
  
echo "<table id='customers'>";
    echo "<tr><th colspan=7>Ordini</th></tr>";
    echo "<tr>";
        echo "<td><b>IDOrdine</b></td>";
        echo "<td><b>Nome</b></td>";
        echo "<td><b>Cognome</b></td>";
        echo "<td><b>Indirizzo</b></td>";
        echo "<td><b>Stato Consegna</b></td>";
        echo "<td><b>Prodotto</b></td>";
        echo "<td><b>Totale Ordine</b></td>";
        
while($row = $result -> fetch_assoc()) {
    echo "<tr>";
    echo "<td> $row[IDOrdini]</td>";
    echo "<td> $row[Nome]</td>";
    echo "<td> $row[Cognome] </td>";
    echo "<td> $row[Indirizzo] </td>";
    echo "<td> $row[StatoConsegna] </td>";
    echo "<td> $row[Descrizione] / $row[Quantita]</td> ";
    echo "<td> $row[TotaleOrdine]€ </td>";
    echo "</tr>";
}
      
echo "</table>";

the query $TabellaOrdini get all values from a user whit that email and the query $CheckOrdini get only the values with the same ID and concat the Description and quantity as Risultato.查询 $TabellaOrdini 从用户那里获取 email 的所有值,查询 $CheckOrdini 仅获取具有相同 ID 的值,并将描述和数量与 Risultato 连接起来。

My goal is that is possible to have 1 order with 1 ID and in Product(row 6 from left of the table) have "ProductName1/Quantity1, ProductName2/Quantity2"我的目标是可能有 1 个具有 1 个 ID 的订单,并且在产品(表格左侧第 6 行)中有“ProductName1/Quantity1,ProductName2/Quantity2”

Use GROUP_CONCAT() to combine values from multiple rows into a single column.使用GROUP_CONCAT()将多行中的值组合到单个列中。

$TabellaOrdini = "SELECT ordini.IDOrdini, clienti.Indirizzo, clienti.Nome, clienti.Cognome, ordini.StatoConsegna,
                         prodotti.Descrizione, ordini.TotaleOrdine, GROUP_CONCAT(pacco.IDProdotti, '/', pacco.Quantita) AS Prodotto
                  FROM clienti
                  NATURAL JOIN ordini
                  JOIN pacco ON ordini.IDPacco = pacco.IDPacco
                  JOIN prodotti ON pacco.IDProdotti = prodotti.IDProdotti
                  WHERE  clienti.IDClienti = ordini.IDClienti  AND clienti.Email = '$email' ORDER BY ordini.IDOrdini
                  GROUP BY ordini.IDOdini";

It's also not necessary to group your joins with () .也没有必要使用()对您的联接进行分组。

And you should stop substituting variables directly into SQL, and instead use prepared statements with bind_param() .并且您应该停止将变量直接替换到 SQL 中,而是使用带有bind_param()的准备好的语句。

You can use better display of Orders with Order ID, Customer details, Date in one row along with a drop down with all detailed products and quantities.您可以在一行中更好地显示带有订单 ID、客户详细信息、日期的订单以及包含所有详细产品和数量的下拉菜单。 This way you are not limited with tabular display option.这样,您就不受表格显示选项的限制。 Else, you can use GROUP_CONCAT with ordini.IDOrdini (your OrderID) and display products as "product01, product02, product03" for same Order01 for instance.否则,您可以将GROUP_CONCATordini.IDOrdini (您的 OrderID)一起使用,并将相同Order01的产品显示为“product01、product02、product03”

Here some link for data-tables with child-rows :这里有一些带有子行的数据表的链接:

https://datatables.net/examples/api/row_details.html https://datatables.net/examples/api/row_details.html

Or you can ajax it out for large child product sets:或者您可以将ajax用于大型子产品集:

https://datatables.net/blog/2017-03-31 https://datatables.net/blog/2017-03-31

NOTE: Please ensure PHP security and try to follow some design pattern for a clean code.注意:请确保 PHP 安全并尝试遵循一些设计模式以获得干净的代码。 Look for Database Object and Binding input parameters with $conn->prepare [ https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php ]查找数据库 Object 和 Binding input parameters with $conn->prepare [ https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.ZE1BFD762321E409CEE4 ]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM