/*Table structure for table `tbl_mail` */
DROP TABLE IF EXISTS `tbl_mail`;
CREATE TABLE `tbl_mail` (
`MailID` INT(64) NOT NULL COMMENT '邮件ID',
`UserID` INT(64) NOT NULL COMMENT '用户ID',
`ActorID` INT(32) NOT NULL COMMENT '角色ID',
`MailItemID` INT(32) COMMENT '邮件模板ID',
`MailType` TINYINT(1) NOT NULL COMMENT '邮件类型',
`MailTitle` VARCHAR(64) NOT NULL COMMENT '邮件标题',
`MailBody` VARCHAR(512) NOT NULL COMMENT '邮件内容',
`SendActorID` INT(32) COMMENT '发送玩家ID',
`SendActorName` VARCHAR(32) COMMENT '发送玩家名字',
`SendTime` DATETIME NOT NULL COMMENT '创建时间',
PRIMARY KEY (`MailID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
/*Table structure for table `tbl_mailgoods` */
DROP TABLE IF EXISTS `tbl_mailgoods`;
CREATE TABLE `tbl_mailgoods` (
`MailID` INT(64) NOT NULL COMMENT '邮件ID',
`UserID` INT(64) NOT NULL COMMENT '用户ID',
`ActorID` INT(32) NOT NULL COMMENT '角色ID',
`GoodsID` INT(32) NOT NULL COMMENT '物品ID',
`GoodsType` TINYINT(1) NOT NULL COMMENT '物品类型',
`Num` INT(32) NOT NULL COMMENT '物品数量',
PRIMARY KEY (`MailID`, `GoodsID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
现在是想从根据外包传进来的UserID和ActorID查找tbl_mail表中的数据,再根据查找出来的数据去tbl_mailgoods中的数据。
从tbl_mail表中能查到多条数据,然后每条数据又有可能在tbl_mailgoods中有多条,怎么写存储过程。
希望输出的集合为:
MailID,MailItemID,MailType,MailTitle,MailBody,SendActorID,SendActorName,SendTime(GoodsID,GoodsType,Num……)
7 个解决方案
#1
先搞清楚这两张表的关联关系是什么
#2
tbl_mailgoods是tbl_mail的子表啊,我们数据库基本没用外键这个东东,加上的话可以实现么?
#3
就是表的联合查询吧
不需要存储过程吧
不需要存储过程吧
#4
“再根据查找出来的数据去tbl_mailgoods中的数据” 这个逻辑是什么,根据什么条件什么字段匹配去查询?
#5
SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID`
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;
内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID`
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;
内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。
#6
OK,3Q,是我想要的
#7
不客气,能帮到你就好。
#1
先搞清楚这两张表的关联关系是什么
#2
先搞清楚这两张表的关联关系是什么
tbl_mailgoods是tbl_mail的子表啊,我们数据库基本没用外键这个东东,加上的话可以实现么?
#3
就是表的联合查询吧
不需要存储过程吧
不需要存储过程吧
#4
“再根据查找出来的数据去tbl_mailgoods中的数据” 这个逻辑是什么,根据什么条件什么字段匹配去查询?
#5
SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID`
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;
内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID`
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;
内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。
#6
SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID`
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;
内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。
OK,3Q,是我想要的
#7
SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID`
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;
内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。
OK,3Q,是我想要的
不客气,能帮到你就好。