我已经MySQL表,看起来像:如何加入/联合来自同一个表的多个结果?
user_messages
ID | user_id | phone_number |消息|方向| created_at
用户
ID |名称
我想通过'group_'user_messages两次和UNION结果。为什么我想这样做?因为user_id有时有一个有效的用户标识(除'-1'之外的任何东西),那么我按它分组,如果它有-1,则按phone_number分组。
我也想留给用户表连接的结果得到的情况下,USER_ID被设置为一个有效的用户
我几乎与查询做了用户名,但问题是:
- 我想要的结果,以具有通过从组结果是最新的一个,这意味着,最大的created_at值
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排序的记录
更新: 该查询实际上在我的本地机器上工作,但不在生产服务器上。在我的本地机器中,我有5.5.42 - Source distribution
和服务器Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper
...什么可能是错误的?
在本地机器上它正确返回我最大created_at但在服务器它返回由记录
你可以提供一个样本数据和来自y的期望结果我们的样本数据?我觉得这个查询可以简化很多。查看数据可以更好地理解问题。 –
'SELECT *,COUNT(*)FROM .... GROUP BY [非行标识字段]'很少是个好主意。 – Uueerdo
@JorgeCampos它实际上工作,但在远程服务器给了我不同的结果..我已经更新了我的问题! – HorusCoding