2016-04-15 3 views
2

Я создал систему обмена сообщениями с уникальным идентификатором для каждого сообщения и категорию, чтобы связать связанные связанные потоки. У меня есть категории, хранящиеся в массиве, и я могу отображать каждое сообщение с помощью этого запроса mysql.SELECT WHERE group id IN array ORDER BY и 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']; 
} 

Вышеупомянутое успешно выводит каждое сообщение, которое находится в пределах идентификаторов категории, перечисленных в массиве. Я пытаюсь отобразить только последние списки, т. Е. Сообщения в каждой категории с наибольшим идентификатором.

Я пробовал группу по категориям, которые потерпели неудачу, это дало мне неправильные результаты.

$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']; 
} 

Я пробовал несколько вариантов, слишком много, чтобы разработать здесь. Я пытаюсь отображать только последние сообщения (последний идентификатор) в любой заданной категории, самый последний сверху.

+0

Ну, если вы имеете в виду самый большой id, вы имеете в виду один предмет или многие из них? Что нового? мин, часов, дней? Я бы подумал об использовании даты. Таким образом, вы можете SELECT * FROM table WHERE Cat IN $ data AND NOW() - 5days> message_date_field. Этот Синтаксис является интродуцированным, но идеал существует. – MadeInDreams

ответ

2

Я думаю, что в подзапросе что-то вроде этого это сделают.

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