我为每条消息创建了一个具有唯一ID的消息系统,以及一个用于保持相关线程绑定/链接的类别。我将类别存储在一个数组中,我可以使用此mysql查询显示每条消息。
$getid = $link->prepare("SELECT * FROM `table` WHERE
category IN ('$array')
ORDER BY id DESC");
$getid->execute();
while($msg=$getid->fetch()) {
echo "<br />".$msg['id'];
}
以上成功输出了数组中列出的类别ID内的每条消息。我试图只显示最近列出的内容,即每个类别中ID最大的消息。
我尝试按类别分组失败,它给了我不正确的结果。
$getid = $link->prepare("SELECT * FROM `table` WHERE
category IN ('$array')
GROUP BY category
ORDER BY id DESC");
$getid->execute();
while($msg=$getid->fetch()) {
echo "<br />".$msg['id'];
}
使用MAX(id)
也失败了$getid = $link->prepare("SELECT MAX(id) FROM `table` WHERE
category IN ('$array')
ORDER BY id DESC");
$getid->execute();
while($msg=$getid->fetch()) {
echo "<br />".$msg['id'];
}
我尝试了多种变体,这里有太多不能详述。我试图在任何给定的类别中只显示最新的消息(最后一个id),最近的消息在最上面。
答案 0 :(得分:2)
我认为像这样的子查询会做到这一点。
select * from `table` T where T.category in ('$array') and
T.id = (select max(id) from `table` where category = T.category)