私は次のようになりますmysqlのテーブルをしましたuser_id | phone_number |メッセージ|方向| created_at同じテーブルの複数の結果を結合/結合するには? |</strong></p> <p>ID</p> <p><strong>user_messages:
ユーザー
ID |名前
user_messagesを2回グループ化して結果をUNIONにしたいとします。なぜ私はこれをしたいですか? user_idには有効なユーザーID(「-1」以外)があることがあるため、-1の場合はグループ化し、次にphone_numberの場合はグループ化します。 USER_IDが有効なユーザー
に設定されている場合には
私もユーザー名を取得するには、ユーザーテーブルと結合結果を残したい私はほとんどのクエリで終わりだが、問題がある:
- 私は、これは私を取得何
select * from (
(
select *, count(*) as `total` from
(select `user_id`, `message`, `created_at`, `phone_number`,`direction` from `users_messages` where `user_id` != -1 order by `created_at` desc)
as `t1` group by `user_id`
)
union
(
select *, count(*) as `total` from
(select `user_id`, `message`, `created_at`, `phone_number`,`direction` from `users_messages` where `user_id` = -1 order by `created_at` desc)
as `t2` group by `phone_number`
)
) as `t3`
left join (select `id`,`name` from `users`) as `t4` on `t3`.`user_id` = `t4`.`id` order by `created_at` desc
が結果はcreated_atとのDESCでソートされていない最大のcreated_at値を意味し、最新のものであるとして、グループからの結果の記録を持つように結果が欲しい
更新: クエリは実際にローカルマシンでは動作しますが、実動サーバーでは動作しません。私のローカルマシンでは5.5.42 - Source distribution
とサーバにはVer 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper
...何が間違っている可能性がありますか?ローカルマシンで
それは正しく私の最大のcreated_atを返しますが、サーバーでは、それはあなたがのuser_idとPHONE_NUMBERによってグループ化しているので、あなたがメッセージや方向性を維持することはできません、レコード
は、あなたがサンプルを提供することができますデータおよびyからの所望の結果私たちのサンプルデータ?私はこのクエリが多く簡略化できるように感じる。データを見ると、問題を理解するのが良い方法です。 –
'SELECT *、COUNT(*)FROM .... GROUP BY [行ID以外のフィールド]'はまれには良い考えです。 – Uueerdo
@ JorgeCamposそれは実際には動作しますが、私にリモートサーバで異なる結果を与えます。私は私の質問を更新しました! – HorusCoding