2

我的数据库中有下表:

    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 中发生.

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

4

2 回答 2

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 ║
╚════╩═══════════╩══════════╝
于 2013-05-24T08:03:27.900 回答
0

在我对代码进行了一些修改后,我发现虽然我打印以调试代码的 SQL 查询是正确的并且可以按预期工作,但由于 bindValue()指令上的错误分配顺序,由于某种原因未被注意到,因此它不会在 PHP 中发生。

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

于 2013-05-24T09:33:16.430 回答