SELECT WHERE组ID IN数组ORDER BY和Group By

时间:2016-04-15 00:46:55

标签: php mysql arrays group-by sql-order-by

我为每条消息创建了一个具有唯一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),最近的消息在最上面。

1 个答案:

答案 0 :(得分:2)

我认为像这样的子查询会做到这一点。

select * from `table` T where T.category in ('$array') and 
  T.id = (select max(id) from `table` where category = T.category)