有两个表
a表为用户表
字段uid存放用户id
字段name存放用户昵称b表为消息表
存放from_uid为发送消息用户ID
to_uid为接受消息的用户ID现在需求是以b表为主表
我想通过一条sql查询,来查询b表里的所有信息并且关联a表,一次把发送者和接受者的用户昵称查出来想了半天没想到办法求教各位高手给指点一下最好直接给出代码
a表为用户表
字段uid存放用户id
字段name存放用户昵称b表为消息表
存放from_uid为发送消息用户ID
to_uid为接受消息的用户ID现在需求是以b表为主表
我想通过一条sql查询,来查询b表里的所有信息并且关联a表,一次把发送者和接受者的用户昵称查出来想了半天没想到办法求教各位高手给指点一下最好直接给出代码
解决方案 »
- 两条命令要怎么合并
- mysql启动问题
- 数据库中有两个表的更新频率非常高,这种情况下适用memcache吗
- mysqd-nt 和mysqld的区别
- postgresql的日志..高手帮我看一下.该如何解决.
- 一个数据库问题
- 关于数据从access到mysql的问题。
- 用Delphi连接mysql有个奇怪的问题,急求帮助!!!!!!
- 各位前辈,我有一个很好的创意,无奈受自身水平所限,空有其心无有其力.这是一个大的工程,请进听小生慢慢道来!!!!
- 请教一条求和的语句写法
- [mysql存储过程]爷父子三表循环
- 为何我的 alter procedure 无法成功呢?官方文档明写着,有 alter procedure 这种语法呀?
from b inner join a a1 on b.from_uid=a1.uid
inner join a a2 on b.to_uid=a1.uid
我的a表假定名为userinfo,b表假定名为message你这个该怎么翻译呀
from message b inner join userinfo a1 on b.from_uid=a1.uid
inner join userinfo a2 on b.to_uid=a1.uid
一个from_uid=2 to_uid=5那么查询出来根据userinfo表里面的uid来匹配的话应当是有两条记录
并且分别把uid=5和uid=2的人名称取出来显示现在这样查询出来记录集为空
提供你的测试数据!很显然你的查询写错了。 建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
uid存放用户id,name字段存放用户名
message表
to_uid字段 存放接受消息方
from_uid字段 存放发送消息方
message字段 存放消息内容userinfo表
第一行内容
uid=1
name=张三第二行内容
uid=2
name=李四
message表内容
第一行
from_uid=1 to_uid=2 message=消息内容
第二行
from_uid=2 to_uid=1 message=消息内容
想要的查询结果为主要查询message表看总共有多少条内容以及列表显示
因为用户名内容存放为userinfo表
所以需要和userinfo表联合查询查询出来的结果显示应当为
发送方 接收方
张三 发送给 李四
李四 发送给 张三
其中结果中发送给是我自己写的
只是想查询出来的结果通过uid的匹配把用户名给列出来
CREATE TABLE `message` (
`to_uid` int(11) NOT NULL,
`from_uid` int(11) NOT NULL,
`message` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
`uid` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `message` VALUES ('2', '1', '你好');
INSERT INTO `message` VALUES ('1', '2', '你也好');
INSERT INTO `userinfo` VALUES ('1', '张三');
INSERT INTO `userinfo` VALUES ('2', '李四');
select b.*,a1.name as fromName,a2.name as toName
from message b inner join userinfo a1 on b.from_uid=a1.uid
inner join userinfo a2 on b.to_uid=a2.uid
mysql> select * from message;
+--------+----------+---------+
| to_uid | from_uid | message |
+--------+----------+---------+
| 2 | 1 | 你好 |
| 1 | 2 | 你也好 |
+--------+----------+---------+
2 rows in set (0.27 sec)mysql> select * from userinfo;
+-----+------+
| uid | name |
+-----+------+
| 1 | 张三 |
| 2 | 李四 |
+-----+------+
2 rows in set (0.00 sec)mysql> select b.*,a1.name as fromName,a2.name as toName
-> from message b inner join userinfo a1 on b.from_uid=a1.uid
-> inner join userinfo a2 on b.to_uid=a2.uid;
+--------+----------+---------+----------+--------+
| to_uid | from_uid | message | fromName | toName |
+--------+----------+---------+----------+--------+
| 1 | 2 | 你也好 | 李四 | 张三 |
| 2 | 1 | 你好 | 张三 | 李四 |
+--------+----------+---------+----------+--------+
2 rows in set (0.00 sec)mysql>