嗨,我有一个名为msgsubjects的表,其架构如下所示。基本上它为用户保留消息。字段viewstatus用于显示是否已读取消息。如果它是0,则msg未读,如果已查看消息,则为1。
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会更有效率。
答案 0 :(得分:4)
您想要按viewstatus
列
$q=sprintf("SELECT * FROM msgsubjects WHERE ownerid=%d ORDER BY viewstatus ASC, date DESC LIMIT %d,%d",$curid,$start,$end);
答案 1 :(得分:1)
是的,这是解决问题的一个非常简单的方法。
ORDER BY
接受多个字段,以便您可以使用多个列进行排序。
ORDER BY viewstatus ASC, date DESC
链接到有关MySQL排序的文档: