2016-04-15 109 views
2

我爲每條消息製作了一個具有唯一標識的消息傳遞系統,還有一個用於保持相關線程綁定/鏈接的類別。我有存儲在數組中的類別,我可以用這個mysql查詢顯示每條消息。SELECT WHERE group id IN array ORDER BY and Group By

$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

那麼當你的意思是最大的id你是指一個單項還是其中的很多?什麼是最近的?分鐘,幾小時,幾天?我會考慮使用日期。所以你可以選擇*從表中的貓在$數據和現在() - 5天> message_date_field。這個語法是incorect,但idean在那裏。 – MadeInDreams

回答

2

我覺得像這樣的子查詢將做到這一點。

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