我想根据products表中的productinformation和producthistory表中的一些字段进行收集如何在单个查询中进行收集?
我的示例代码:
<table>
<thead>
<tr>
<th>Product</th>
<th>Model</th>
<th>Actıve Total</th>
<th>Pasıve Total</th>
<th>Color Total</th>
</tr>
</thead>
<tbody>
<?php
$product = $db->get_results("SELECT * FROM product WHERE (status='ACTIVE')");
foreach ($product as $p ){
$active_total = $db->get_var("SELECT SUM(price) FROM product_history WHERE pid='$p->pid' AND status='AKTIVE'");
$pasive_total = $db->get_var("SELECT SUM(price) FROM product_history WHERE pid='$p->pid' AND status='PASIVE'");
$color_total = $db->get_var("SELECT SUM(price) FROM product_history WHERE pid='$p->pid' AND status='ACTIVE' AND color='BLUE'");
?>
<tr>
<td><?php echo $p->name; ?></td>
<td><?php echo $p->model; ?></td>
<td><?php echo $active_total; ?></td>
<td><?php echo $pasive_total; ?></td>
<td><?php echo $color_total; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
谢谢。
2条答案
按热度按时间jtw3ybtb1#
可以使用条件聚合从一个查询中获取以下结果:
实际上,您可以使用
LEFT JOIN
:如果利息的唯一价值来自
product
是pid
(为了与pid
价值product_history
)你应该换衣服p.*
在查询中p.pid
. 否则,理想情况下应该枚举需要其值的特定字段。为什么select*被认为是有害的?piv4azn72#
我猜你想知道所有的颜色而不仅仅是蓝色?如果那样的话,我会选择
LEFT JOIN
```SELECT p.pid, p.name, SUM(ph.price) AS total, ph.color, ph.status
FROM product p
LEFT JOIN product_history ph ON (p.pid = ph.pid)
WHERE p.status = 'ACTIVE'
GROUP BY p.pid, p.name, ph.status, ph.color