Mysql查询不是我想要的数据

时间:2015-01-13 01:25:23

标签: mysql sql

我想从2个表中获取记录,查询工作但不能按我的意愿返回。

我想要显示所有在t1.msg_from中有id并且按t1.msg_status排序的用户(状态值为0和1)

首先所有状态都有值= 0然后是1

 SELECT t1.msg_status, t2.ID, t2.username
 FROM messages t1
 LEFT OUTER JOIN users t2 ON t1.msg_from=t2.ID
 GROUP BY t2.ID ORDER BY t1.msg_status ASC

1 个答案:

答案 0 :(得分:0)

select m.msg_status, u.id, u.username
from messages m
join users u on m.msg_from = u.id
order by u.id, m.msg_status

我猜猜以上可能是你想要的。在你的订单之前拥有一个小组的问题是,你基本上将所有内容都折叠为单个用户ID,并且就此而言,它是一种关于哪一个mysql将放入状态字段的猜谜游戏。因此,当您通过部分查询获得订单时,没有任何内容可供订购,因为您已将其折叠为每个用户ID的单个记录。

-

如果您要查找每个用户ID的状态计数,那么您可以稍微修改它:

select count(*), m.msg_status, u.id, u.username
from messages m
join users u on m.msg_from = u.id
group by u.id, m.msg_status

<强>更新

drop table if exists messages;
create table messages (
  message_id INT(15),
  message VARCHAR(100),
  msg_from INT(15),
  msg_status INT(1)
  );
drop table if exists users;
create table users (
  id int(15),
  username varchar(50)
  );

insert into users values
(55, 'John Doe'),
(66, 'Paul Hopkins'),
(77, 'Mike Jones'),
(88, 'Fred Astaire');
insert into messages values
(1, 'Hi how are you?', 55, 0),
(2, 'I have read this', 55, 1),
(3, 'also read this', 55, 1),
(4, 'Another not read', 55, 0),
(5, 'diff user already read', 77, 1),
(6, 'Sup, not read', 88, 0),
(7, 'Partially ready', 88, 1),
(8, 'Not read 88', 88, 0);

select m.msg_status, u.id, u.username
from messages m
join users u on m.msg_from = u.id
order by u.id, m.msg_status;

working fiddle

无论如何,这就像我所知道的那样,尽你所能。它首先为用户提供未读消息。如果您想要首先读取所有未读消息,则可以按顺序翻转订单。 例如order by m.msg_status, u.id