0

嘿伙计们,我有以下几点:

$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(*)会影响任何东西。

建议和想法表示赞赏!

4

1 回答 1

1

首先,您似乎需要将查询更改为:

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 基础知识/intermediates 查询、聚合、连接和各种好东西。请务必阅读本文,它不仅可以整理您评论的第一部分。

至于我回答的第二部分,当您在查询中进行聚合时(例如计数匹配行),数字将在行内返回,如下所示:

ID    Count
1     5
2     8

因此,当您获取一行的数组时,您将得到如下内容:

$array=('ID' => 1, 'Count' => 5)

但是,当您运行 a 时,num_rows()它会计算记录集中的所有行 - 在上面将是 2,因为显示的结果中有两行。

我希望这会有所帮助,如果您仍然想要更详细的信息,请告诉我,我会看看我能做些什么。

于 2013-10-09T00:12:09.217 回答