简体   繁体   中英

How to group MySQL results based on field

Hi, I have a table called msgsubjects with a schema shown below. Basically it holds messages for users. The field viewstatus is used to show if a message has been read/not. if its 0, msg is unread and 1 if message has been viewed.

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)

This is my current sql to pull these results.

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

Want I want to do is have my results returned grouped having unread messages shown first regardless, I want the groups to still be ordered by date. Can this be done with sql? I know I can do this with php but sql would be more efficient.

您想按viewstatus列对消息进行排序

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

Yes, and it is a very simple solution to the problem.

ORDER BY accepts multiple fields so that you can sort using more than one column.

ORDER BY viewstatus ASC, date DESC 

Link to documentation regarding sorting in MySQL:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM