嘿伙计们,我有以下内容:
$sql = "SELECT COUNT(*) pk_ID FROM "._DB_NAME."."._DB_PREFIX."_Device
WHERE vc_Serial = :deviceID";
$sth=$DBH->prepare($sql);
$sth->execute(array(':deviceID' =>$device_id));
//give amount of results
$row = $sth->fetch(PDO::FETCH_ASSOC);
$count = $sth->rowCount();
使用此代码,我用来查看有多少结果受到$count
的影响,然后存储一个值$fk_DeviceID = $row['pk_ID'];
问题是我没有返回正确的 ID。 我不知道SELECT COUNT(*)
是否正在影响任何事情或其他什么。
感谢建议和想法!
首先,看起来您需要将查询更改为以下内容:
SELECT
COUNT(*) as pkCount,
pk_ID
FROM
"._DB_NAME."."._DB_PREFIX."_Device
WHERE
vc_Serial = :deviceID
group by
pk_id
由于您似乎正在尝试获取两列,因此我在术语之间添加了一个逗号,然后在您指望列时添加了一个group by
语句 - 因此您需要根据聚合对结果进行分组。
其次,让我们假设只有一个pk_ID。$count
变量将仅显示 1,而不显示数据库中计数的项目数,因为它计算记录集中有多少行。
您可能希望改为执行以下操作:
echo $row['pkCount'];
这将显示查询本身中计数/聚合的行数,这可能与查询实际返回的行数不同。
编辑(每条评论(:
首先,SQL本身有点无聊。虽然我不能在不重新制作轮子的情况下真正跳进去解释比我在这里做的更多,但我可以提供我认为对你有用的链接,这是一个非常长的问答,我写的解释了很多SQL基础知识/中间查询,聚合和连接以及各种好东西。请阅读此内容,它不仅可以整理您评论的第一部分。
至于我答案的第二部分,当您在查询中执行聚合(例如计数匹配行(时,行内返回的数字如下所示:
ID Count
1 5
2 8
因此,当您获取一行的数组时,您将获得如下所示的内容:
$array=('ID' => 1, 'Count' => 5)
但是,当您运行num_rows()
时,它会计算记录集中的所有行 - 在上面将是 2,因为显示的结果中有两行。
我希望这进一步有所帮助,如果您仍然想要更详细的内容,请告诉我,我会看看我能做些什么。