現在、下記のようなDB構成の既存メールシステムをLINEのようなチャットシステムに変更してます。
|id|to_user_id|from_user_id|to_user_flg|from_user_flg|send_date|
|:--|:--:|--:|--:||--:|
|ユニーク(インクリメント)|受信者ID|送信者ID|受信者フラグ|送信者フラグ|送信日時|
DBの構成を変えないで呼び出し方を変えて変更したいと考えています。
受信者フラグは下記のようになっています。
to_user_flg
0: 削除済み
1: 未読
2:既読
※グループチャットはありません。
上記のようになっています。
やりたいことはチャットルーム一覧ページのソートで
やり取りしているユーザーIDの小さい方を先に文字列連結して
ルームIDを作っています。
ルームIDでグループ化してやり取りユーザ毎に取得できるようにしています。
問題はソートで
(未読、既読、返信済み)ANDメールIDの降順でソートしたいのですが
うまくソートできません。おそらくGROUP BYで持ってきてるSORTが最後のやり取りから取得できてないが
原因だと思いますが意思通り取得できる方法はありませんでしょうか。
最悪、テーブルは追加できます。
sql
1 2ユーザーIDは一覧ページを取得するユーザのIDが入ります。 3 4SELECT MAX(id) AS max_id, 5(CASE WHEN (from_user_id < to_user_id) 6THEN CONCAT(from_user_id, to_user_id) 7 ELSE CONCAT(to_user_id, from_user_id) 8END) AS ROOMID, 9 (CASE WHEN (to_user_id = 「ユーザID」 AND to_user_flg=1) 10THEN 0 #未読 11WHEN (to_user_id = 「ユーザID」) 12THEN 1 #既読 13ELSE 2 #返信済み 14END) AS SORT 15FROM mail_data 16WHERE (to_user_id = 「ユーザID」 OR from_user_id = 「ユーザID」) 17 AND to_user_flg != 0 18GROUP BY ROOMID ORDER BY SORT ASC, max_id DESC 19 20 21
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/15 07:56 編集