我的数据库中有以下表格:
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中不会出现 ()由于某种原因未被注意的说明。
为了清楚起见,我没有把这些代码放在问题中,因为代码很重,所以很抱歉在这个问题上失去了每个人的时间并感谢回复。
答案 0 :(得分:0)
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 ║
╚════╩═══════════╩══════════╝
答案 1 :(得分:0)
在我修改了一些代码之后,我发现虽然我打印到调试代码的SQL查询是正确的并按预期工作但是由于分配错误而在PHP中不会出现对bindValue()指令的命令,由于某种原因而被忽视。
为了清楚起见,我没有把这些代码放在问题中,因为代码很重,所以很抱歉在这个问题上失去了每个人的时间并感谢回复。