将多个表中的相似数据分组并添加结果
Group similar data from multiple tables and add result
我希望能够显示客户拥有的商品数量和商品总数,并添加每个商品 ID 的价格和总价。我无法锻炼如何做到这一点的逻辑。到目前为止,我可以显示客户拥有的所有项目,但有些项目是重复的。
$clientid = 24;
$query = "SELECT items.itemid, prices.priceid FROM items
JOIN prices ON items.itemid = prices.itemid
WHERE items.clientid = '$clientid'";
$result = $db_connect -> query($query);
$row_cnt = $result -> num_rows;
echo $joinrow_cnt."<br/><br/><br/>";
while($assocresult = mysqli_fetch_assoc($result)){
$price = $assocresult['priceid'];
$item = $assocresult['itemid'];
$realprice = ($price/100)*80; //after 80% discount
echo "ItemId: ".$item." Price : " .$price." real price: " .$realprice."<br/>";
}
到目前为止我得到:
ItemId: 1 Price : 100 real price: 80
ItemId: 3 Price : 25 real price: 20
ItemId: 1 Price : 100 real price: 80
ItemId: 5 Price : 200 real price: 160
ItemId: 3 Price : 25 real price: 20
ItemId: 1 Price : 100 real price: 80
查看 ItemId 1 和 3 是如何重复的。有很多这样的行,其中项目 ID 重复。
我希望输出如下:
ItemId: 1x3 Price: 100 real price = 80x3=240
ItemId: 3x2 Price: 25 real price = 20x2=50
ItemId: 5 Price: 200 real price: 160 //since this item is listed only once.
请帮忙。非常感谢!!
您可以获取所有 items
和 prices
数据并将它们与 WHERE
匹配,然后使用 GROUP BY
将重复项收集为一行。使用 COUNT(..)
您可以获得每个项目的行数。
这应该可以解决问题:
SELECT
COUNT(items.itemid) as cnt,
items.itemid,
prices.priceid
FROM items, prices
WHERE
items.itemid = prices.itemid
AND
items.clientid = '$clientid'
GROUP BY items.itemid
检查解决方案如下:
$clientid = 24;
$query = "SELECT items.itemid, prices.priceid, count(items.itemid) as itemcnt FROM items
JOIN prices ON items.itemid = prices.itemid
WHERE items.clientid = '$clientid' group by items.itemid";
$result = $db_connect -> query($query);
$row_cnt = $result -> num_rows;
echo $row_cnt."<br/><br/><br/>";
while($assocresult = mysqli_fetch_assoc($result)){
$price = $assocresult['priceid'];
$item = $assocresult['itemid'];
$itemcnt = $assocresult['itemcnt'];
$realprice = ($price/100)*80; //after 80% discount
echo "ItemId: ".$item."x".$itemcnt." Price: " .$price." real price = " .$realprice."x".$itemcnt."=".($realprice*$itemcnt)."<br/>";
}
当您进入第 10 行时,我没有收到任何错误。代码中 $db_connect
的值是多少?
告诉我。谢谢!
我希望能够显示客户拥有的商品数量和商品总数,并添加每个商品 ID 的价格和总价。我无法锻炼如何做到这一点的逻辑。到目前为止,我可以显示客户拥有的所有项目,但有些项目是重复的。
$clientid = 24;
$query = "SELECT items.itemid, prices.priceid FROM items
JOIN prices ON items.itemid = prices.itemid
WHERE items.clientid = '$clientid'";
$result = $db_connect -> query($query);
$row_cnt = $result -> num_rows;
echo $joinrow_cnt."<br/><br/><br/>";
while($assocresult = mysqli_fetch_assoc($result)){
$price = $assocresult['priceid'];
$item = $assocresult['itemid'];
$realprice = ($price/100)*80; //after 80% discount
echo "ItemId: ".$item." Price : " .$price." real price: " .$realprice."<br/>";
}
到目前为止我得到:
ItemId: 1 Price : 100 real price: 80
ItemId: 3 Price : 25 real price: 20
ItemId: 1 Price : 100 real price: 80
ItemId: 5 Price : 200 real price: 160
ItemId: 3 Price : 25 real price: 20
ItemId: 1 Price : 100 real price: 80
查看 ItemId 1 和 3 是如何重复的。有很多这样的行,其中项目 ID 重复。
我希望输出如下:
ItemId: 1x3 Price: 100 real price = 80x3=240
ItemId: 3x2 Price: 25 real price = 20x2=50
ItemId: 5 Price: 200 real price: 160 //since this item is listed only once.
请帮忙。非常感谢!!
您可以获取所有 items
和 prices
数据并将它们与 WHERE
匹配,然后使用 GROUP BY
将重复项收集为一行。使用 COUNT(..)
您可以获得每个项目的行数。
这应该可以解决问题:
SELECT
COUNT(items.itemid) as cnt,
items.itemid,
prices.priceid
FROM items, prices
WHERE
items.itemid = prices.itemid
AND
items.clientid = '$clientid'
GROUP BY items.itemid
检查解决方案如下:
$clientid = 24;
$query = "SELECT items.itemid, prices.priceid, count(items.itemid) as itemcnt FROM items
JOIN prices ON items.itemid = prices.itemid
WHERE items.clientid = '$clientid' group by items.itemid";
$result = $db_connect -> query($query);
$row_cnt = $result -> num_rows;
echo $row_cnt."<br/><br/><br/>";
while($assocresult = mysqli_fetch_assoc($result)){
$price = $assocresult['priceid'];
$item = $assocresult['itemid'];
$itemcnt = $assocresult['itemcnt'];
$realprice = ($price/100)*80; //after 80% discount
echo "ItemId: ".$item."x".$itemcnt." Price: " .$price." real price = " .$realprice."x".$itemcnt."=".($realprice*$itemcnt)."<br/>";
}
当您进入第 10 行时,我没有收到任何错误。代码中 $db_connect
的值是多少?
告诉我。谢谢!