2011-12-18 5 views
0

Привет, У меня есть таблица под названием msgsubjects со схемой, показанной ниже. В основном он содержит сообщения для пользователей. Поле viewstatus используется, чтобы показать, было ли сообщение прочитано/нет. если его 0, msg непрочитано и 1, если сообщение было просмотрено.Как группировать результаты MySQL на основе поля

id int(11)   No  auto_increment       
    ownerid int(11)   No         
    posterid int(11)   No         
    viewstatus int(11)   No         
    bodyid int(11)   No         
    subject varchar(255) utf8_general_ci  No         
    date int(11) 

Это мой текущий sql, чтобы вытащить эти результаты.

$q=sprintf("SELECT * FROM msgsubjects WHERE ownerid=%d ORDER BY date DESC LIMIT %d,%d",$curid,$start,$end); 

Хотите, я хочу сделать, это мои результаты возвращаются сгруппированных имеющие непрочитанные сообщения, отображающиеся первый независимо, я хочу, чтобы группы по-прежнему будут упорядочены по дате. Это можно сделать с помощью sql? Я знаю, что могу сделать это с помощью php, но sql будет более эффективным.

+2

Вы можете использовать 'TINYINT' (1 байт) вместо' INT' (4 байта) для 'viewstatus'. Или даже «BIT» (1 бит). И тип 'DATE' для' 'date' ': http://dev.mysql.com/doc/refman/5.1/en/data-types.html –

ответ

4

Вы желаете, чтобы сортировать сообщения по viewstatus колонке

$q=sprintf("SELECT * FROM msgsubjects WHERE ownerid=%d ORDER BY viewstatus ASC, date DESC LIMIT %d,%d",$curid,$start,$end); 
1

Да, и это очень простое решение проблемы.

ORDER BY принимает несколько полей, так что вы можете сортировать, используя более одного столбца.

ORDER BY viewstatus ASC, date DESC 

Ссылка на документацию относительно сортировки в MySQL:

Смежные вопросы