0

我对 MySQL 还很陌生,我遇到了这个问题,我已经寻求帮助,但找不到答案(可能是因为我不确定要搜索什么)。我确信有一个简单的解决方案。

我有一个像这样的简单 MySQL 表:

id   |   referenceid   |   status
40       104702            4
39       104720            2
38       104720            0
37       104719            2
36       104719            0
35       104702            2
34       104702            0
41       104719            5

我想获取一个将产生以下输出的数组:

对于每个唯一的“referenceid”字段,我想知道最高的“ID”(即最近的)及其“状态”。

所以我试过这个查询:

$result = mysql_query(
  "SELECT status,id,referenceid 
   FROM image_status_tracking 
   GROUP BY referenceid",$db);

while ($row = mysql_fetch_array($result)) {
  $id = $row['id'];
  $status = $row['status'];
  $referenceid = $row['referenceid'];
  echo "ID $id, REFID $referenceid, Status $status <br />";
}

这给出了这个输出:

ID 40, REFID 104702, Status 4

ID 37, REFID 104719, Status 2

ID 39, REFID 104720, Status 2 

但这不是我希望的结果。参考 ID 104719 的 ID 和状态应该是 41 和 5,而不是 37 和 2。

我无法弄清楚如何获取每个参考 ID 的最新 ID 行输出。

我注意到,在 PHPMYADMIN 中(您可以在上表中看到),ID 以相反的顺序列出,最新的 ID 在底部。我不确定这是否与这个问题有关。

我希望这很清楚,我相信这是一件简单的事情。

感谢您的阅读。

詹姆士

4

3 回答 3

4

从记忆中打字,所以你可能需要稍微纠正一下语法,但我认为这个概念应该有效。

select * 
  from image_status_tracking 
 where id in (
              select max(id) from image_status_tracking 
              GROUP BY referenceid
             )
于 2012-10-01T20:54:03.690 回答
1

您的查询不符合您的要求。对于每个参考 id,它会选择一个随机的 id 和状态。这是 MySQL 的一个(错误)功能,称为隐藏列。

你想要的更像是:

select ist.*
from image_status_tracking ist join
     (SELECT referenceid, max(id) as maxid
      FROM image_status_tracking 
      GROUP BY referenceid
    ) r
    on ist.referenceid = r.referenceid
于 2012-10-01T20:57:26.903 回答
1

试试这个...

 SELECT MAX(ID), Status From image_status_tracking 
       GROUP BY referenceid
于 2012-10-01T21:05:25.497 回答