我对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
但这不是我希望的结果。 referenceid 104719的ID和状态应为41和5,而不是37和2.
我无法弄清楚如何为每个referenceid获取最新的ID行输出。
我注意到的一些东西,在PHPMYADMIN中,(您可以在上表中看到),ID以相反的顺序列出,最新的ID位于底部。我不确定这是否与这个问题有关。
我希望这很清楚,我确信这是一件简单的事情。
感谢您的阅读。
詹姆斯
答案 0 :(得分:4)
从内存中键入内容,这样你可能需要稍微纠正一下语法,但我认为这个概念应该有效。
select *
from image_status_tracking
where id in (
select max(id) from image_status_tracking
GROUP BY referenceid
)
答案 1 :(得分: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
答案 2 :(得分:1)
试试这个......
SELECT MAX(ID), Status From image_status_tracking
GROUP BY referenceid