求一条sql语句

Allyzhou 2010-09-30 04:18:31
表 User userid bigint
username varchar

表Message messageId bigint
fromUserid bigint
toUserid bigint
sendtime date

这是个发送聊天信息相关的两个表,现写出SQL语句,求出username = ‘TestUser’这个人最近联系的10个人(包括发送的和接受的人)
...全文
54 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allyzhou 2010-10-09
  • 打赏
  • 举报
回复
我想以后我会注意我发问的形式,谢谢~
ACMAIN_CHM 2010-09-30
  • 打赏
  • 举报
回复

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

ACMAIN_CHM 2010-09-30
  • 打赏
  • 举报
回复
[Quote]insert into test.message values(1,1,2,'2010-09-30 16:44:00');
这样随便插入几条

数据库都是自己随便建的,抽象出最简单的模型。[/Quote]
楼主够懒得的。连测试数据都懒得提供,也就是说想帮助你的人反而要自己去准备数据?


问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
ACMAIN_CHM 2010-09-30
  • 打赏
  • 举报
回复
select username
form (
select if(fromUserid=(select id form p where username='TestUser'),toUserid,fromUserid) as uid ,max(sendtime) as msendtime
from message
where (fromuser=(select id form p where username='TestUser') or toUserid=(select id form p where username='TestUser') )
group by if(fromUserid=(select id form p where username='TestUser'),toUserid,fromUserid)
) a, p
where a.uid=p.id
order by msendtime desc
limit 10
Allyzhou 2010-09-30
  • 打赏
  • 举报
回复
user表
CREATE TABLE `test`.`p` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(45) NOT NULL,
PRIMARY KEY(`id`)
)
ENGINE = InnoDB;
insert into test.user values(1,'1');
这样插入几条吧

message表
CREATE TABLE `test`.`message` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`fromuser` INTEGER UNSIGNED NOT NULL,
`touser` INTEGER UNSIGNED NOT NULL,
`sendtime` DATETIME NOT NULL,
PRIMARY KEY(`id`),
CONSTRAINT `FK_q_1` FOREIGN KEY `FK_q_1` (`fromuser`)
REFERENCES `user` (`id`)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
CONSTRAINT `FK_q_2` FOREIGN KEY `FK_q_2` (`touser`)
REFERENCES `user` (`id`)
ON DELETE RESTRICT
ON UPDATE RESTRICT
)
ENGINE = InnoDB;

insert into test.message values(1,1,2,'2010-09-30 16:44:00');
这样随便插入几条

数据库都是自己随便建的,抽象出最简单的模型。
wwwwb 2010-09-30
  • 打赏
  • 举报
回复
贴记录及要求结果出来看看
建表、插入记录SQL语句贴出来
Allyzhou 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]

贴记录及要求结果出来看看,try:
select * from Message a left join User b on a.fromUserid=b.Userid
left join User c on a.toUserid=c.Userid
where 10<=(select count(*) from Message where messageId=a.messageId
and……
[/Quote]
没有报错,但也没有结果出来。
不过,仍然谢过~
wwwwb 2010-09-30
  • 打赏
  • 举报
回复
贴记录及要求结果出来看看,try:
select * from Message a left join User b on a.fromUserid=b.Userid
left join User c on a.toUserid=c.Userid
where 10<=(select count(*) from Message where messageId=a.messageId
and sendtime<=a.sendtime)

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧