我制作了一个消息传递系统,每条消息都有一个唯一的 ID,并有一个类别来保持相关线程的绑定(bind)/链接。我将类别存储在数组中,并且可以使用此 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),最新消息位于顶部。
最佳答案
我认为像这样的子查询就可以做到。
select * from `table` T where T.category in ('$array') and
T.id = (select max(id) from `table` where category = T.category)
关于php - SELECT WHERE 组 ID IN 数组 ORDER BY 和 Group By,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636469/