我遇到了使用条件语句获得2个不同行数的问题。
$sql = select sum(id = :id AND category = :cat) as count1,
sum(category = :cat) as count2
from furniture;
$stmt = $connectdb->prepare($sql);
$stmt->execute(array(':id'=>$id, ':cat'=>"1"));
$resulta = $stmt->fetchAll(PDO::FETCH_ASSOC);
$rowCount1 = count(count1);
$rowCount2 = count(count2);
如何获取count1或count2的计数值?
答案 0 :(得分:1)
您可以使用fetch
代替fetchAll
,因为您的结果只会包含1条记录:
$resulta = $stmt->fetch(PDO::FETCH_ASSOC);
要访问该记录,请执行以下操作:
$rowCount1 = $resulta['count1'];
$rowCount2 = $resulta['count2'];
除此之外,您需要在查询周围引用,并且您需要查询的where子句:
$sql = "select sum(id) as count1, sum(category) as count2 from furniture where id = :id AND category = :cat";
但是我怀疑这是否会产生预期的结果。
答案 1 :(得分:1)
我可能会这样做。顺便说一句,道具给你在SQL中的SUMming而不是在:)之后做一个可怕的循环。
$resulta = $resulta[0];
$rowCount1 = $resulta['count1'];
$rowCount2 = $resulta['count2'];
答案 2 :(得分:0)
->fetchall()
方法返回结果行数组,因此您必须执行
$rowCount1 = $resulta[0]['count1'];
$rowCount2 = $resulta[0]['count2'];
或者,如果您知道只有一个结果行使用
$resulta = $stmt->fetch(PDO::FETCH_ASSOC);
$rowCount1 = $resulta['count1'];
$rowCount2 = $resulta['count2'];
就像一个问题,我不知道该查询正在做什么,或者即使它会起作用!