[英]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_CONCAT与ordini.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.