SQL查询:
select c.cid, la.lid, b.bid, b.type
from c c
left join la la on c.cid = la.cid
left join b b on la.lid = b.lid
where b.type = 'Primary';
有三个表c-> la-> b
对于任何给定的“ la”,我都需要总数为“ b”,但是出于其他目的,我需要在where子句中使用“ b.type ='Primary'”。
b.type有两种类型-Primary和Secondary,但是我要计算'b'的总数(Primary和Secondary),有人可以给出任何提示吗?对我来说这将是一个很好的学习。谢谢。
答案 0 :(得分:1)
尝试一下:
SELECT
c.cid,
la.lid,
b.bid,
b.type,
d.cbdi
FROM c c
LEFT JOIN la la ON c.cid = la.lid
LEFT JOIN b b ON la.lid2 = b.lid2
LEFT JOIN (
SELECT
la.lid,
COUNT(b.bid) AS cbid
FROM la la
LEFT JOIN b b ON la.lid2 = b.lid2
GROUP BY la.lid
) d ON la.lid = d.lid
WHERE
b.type = 'Primary';
答案 1 :(得分:1)
由于有secondary
子句,因此无法根据所附的屏幕快照在期望的输出中包含where b.type = 'Primary'
的行。请再次检查,看来您的要求不清楚。
答案 2 :(得分:1)
您似乎想显示所有未聚合的行,但同时显示一个聚合(b计数)。这是通过窗口函数COUNT OVER
完成的。
select c.cid, la.lid, b.bid, b.type, count(*) over (partition by la.lid) as number_of_b
from la
join c on c.cid = la.cid
join b on b.lid = la.lid
order by c.cid, la.lid, b.bid;
如果要将其限制为至少有一个主la
的{{1}},请相应地扩展此查询:
b
答案 3 :(得分:0)
一种解决方案是对表b进行两次连接,以仅选择主记录,然后对所有记录进行计数。像这样:
$query = mysqli_query($conn, "SELECT * FROM `store_products`");
$res = [];
if(mysqli_num_rows($query) >= 1) {
$mmbr = getMember("Admin");
$sql = 'SELECT `product_name`,`price`,`quantity`,`product_permissions` FROM `store_products` WHERE';
while($row = mysqli_fetch_assoc($query)) {
// bool / int
$getGroup = InGroupID($mmbr["main_group_id"], $mmbr["secondary_group_ids"], $row["product_permissions"]);
// Concat all the existing group into a query string.
if($getGroup) {
$sql .= " CONCAT(',', product_permissions, ',') like '%{$getGroup}%' OR";
}
}
// Remove last OR
$sql = rtrim($sql, 'OR');
$prepare = mysqli_query($conn, $sql);
// If finally using PDO, you can do this instead
// $res = $sth->fetch(PDO::FETCH_ASSOC);
// Saves you from another loop.
while($row = mysqli_fetch_assoc($prepare)) {
$res[] = $row;
}
// Tested and Working, Thanks!!
echo json_encode($res);
}
else {
$res = [
"product_name" => "no_products_available_foruser",
"price" => 0,
"quantity" => 0
];
echo json_encode($res);
}
[1]: https://www.php.net/manual/en/book.pdo.php