gpt4 book ai didi

php - PDO 返回单行而 MySQL 返回多行

转载 作者:行者123 更新时间:2023-11-29 03:39:15 25 4
gpt4 key购买 nike

我的数据库中有下表:

    id    |    reference    |    secondID    
---------------------------------------------
1 | 11 | 1
2 | 12 | 1
3 | 12 | 2
4 | 13 | 1
5 | 13 | 2
6 | 13 | 3

我想获得每个引用的最大 secondID,所以我正在执行下一个 SQL 查询:

SELECT *, MAX(secondID) FROM TABLE_A WHERE 1 GROUP BY REFERENCE

如果我通过 phpMyAdmin 直接在数据库中执行此查询,我会得到我期望的结果:

    id    |    reference    |    secondID    
---------------------------------------------
1 | 11 | 1
3 | 12 | 2
6 | 13 | 3

问题是我在 PHP 中执行此操作时没有得到相同的结果,因为我只返回一行而不是三行

(这里是查询的一些代码)

$sql = "SELECT *, MAX(secondID) FROM TABLE_A WHERE 1 GROUP BY REFERENCE";
$this->result = $this->db->prepare($sql);

$confirmation = $this->result->execute();

if ($this->result->errorCode() != 0)
{
$errors = $this->result->errorInfo();
print_r($errors);
}

if ($confirmation)
{
return $this->result;
}

return $confirmation;

(以及我如何获取数据)

$row_number = 0;
while ($data = $db_resource->fetch(PDO::FETCH_ASSOC))
{
echo $row_number . '<br />';
$row_number++;
}

我知道,如果我去掉“MAX”和“GROUP BY”,我会在 PHP 中得到不止一行,但我不明白为什么这些语句会发生这种情况。

有什么建议可以采纳吗?

解决方案
在我对代码进行一些修改后,我发现虽然我为调试代码打印的 SQL 查询是正确的并且按预期工作,但由于 bindValue 上的分配顺序错误,它不会出现在 PHP 中() 由于某种原因被忽视的说明。

为了清楚起见,我没有将该代码放入问题中,因为代码量很大,很抱歉在这个问题上浪费了大家的时间,感谢回复。

最佳答案

SELECT  a.*
FROM tableName a
INNER JOIN
(
SELECT reference, MAX(secondID) MAX_ID
FROM tableName
GROUP BY reference
) b ON a.reference = b.reference AND
a.secondID = b.MAX_ID

SELECT  a.*
FROM tableName a
WHERE a.secondID =
(
SELECT MAX(secondID)
FROM tableName b
WHERE b.REFERENCE = a.REFERENCE
)

输出

╔════╦═══════════╦══════════╗
║ ID ║ REFERENCE ║ SECONDID ║
╠════╬═══════════╬══════════╣
║ 1 ║ 11 ║ 1 ║
║ 3 ║ 12 ║ 2 ║
║ 6 ║ 13 ║ 3 ║
╚════╩═══════════╩══════════╝

关于php - PDO 返回单行而 MySQL 返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com