私はすでに数時間これに取り組んでいます。メッセージングシステムをコーディングしていて、テーブルには次の列があります。MySQLグループをconcat値で取得し、各グループ内の最初のID(UUID)を取得します
ID(UUID)| from_user_id(uuid)| to_user_id(uuid)|テーマ|ボディー| created_at
受信トレイのページで件名+ from_user_idでグループ化された結果を取得する必要があります。これは、サブジェクトが同じであれば、それは別のダイアログであり、他のユーザーが同じサブジェクトを持つメッセージを送信する場合は、from_user_idをサブジェクトと連結して他のダイアログとマージされないようにする必要があるからです。
第2のことは、各グループについて、最初のメッセージをダイアログカバーメッセージとして表示する必要があることです。私は通常のIDが使用されているが、代わりにUUIDを使用しているので、問題を解決するのはかなり簡単なので、minまたはmaxを使用することはできません。だから私は最後の行を決定するためにcreated_atフィールドを使用する必要があります。
私は多くのアプローチを試みましたが、私は必要な結果を得ることができません。おそらく誰も同じような問題を抱えていて、解決策を持っているのでしょうか?
select msg.id, msg.body, msg.created_at, concat(msg.from_user_id, msg.subject) as concat
from messages as msg
where msg.to_user_id = '8d99eb39-24f8-4dd6-b984-9505cd3eb6b6'
order by msg.created_at desc limit 10 offset 0
あなたがで 'グループを使用しなかったためにサブクエリを必要としますクエリの最後に「concat'?正確に何が問題なのですか? – farhadamjady
concatによるグループは、各グループの最初のアイテム(少なくとも最初のid)を取得する必要があるため、値の順序によるグループ化がグループ内でランダムであり、max(id)を使用できないため、それはUUIDなので –