フィールドに基づいてMySQL結果をグループ化する方法

こんにちは、私は以下のスキーマを持つ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
viewstatus INT (4バイト)ではなく TINYINT (1バイト)を使用できます。あるいは BIT (1ビット)ですらあります。 "date" dev.mysql.com/doc/refman/5.1/ja/data-types.html
追加された 著者 ypercubeᵀᴹ,

2 答え

メッセージを viewstatus 列でソートしたい

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

はい、それは問題の非常に簡単な解決策です。

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

ORDER BY viewstatus ASC, date DESC 

MySQLでのソートに関するドキュメントへのリンク:

1
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com