我是这样理解的:
1、要求根据UserId,查T_Mail_User表,得到MailId,再查T_Mail表获得邮件。
2、同时可以获得用户的收藏邮件。即不但提供UserId输入,而且提供“是否要取收藏记录”的输入参数。
3、同时支持条件查询,比如,按发送日期等查询,默认1=1,即没有条件语句。
这样,存储过程中关键的语句为
if(@filterString is null)
set @filterString='1=1'
declare cmdStr char(256)
if(isGetFavorite)
set cmdStr='select b.* from T_Mail_User a,T_Mail b
where a.isFavorite=1 and a.UserId=@userId and a.MailId=b.MailId and a.MailType=0 and '+@filterString
else
...a.isFavorite=0...
exec(cmdStr)
上面假设收件箱标识为0,如果参数化,此存储过程也可用于查用户的发件箱等。
上面的@filterString就是条件字符串,或者‘1=1’可能由前台提供,此时不必要第一个if。
看不明白这个两个表
不过括号内(默认1=1)的含义是:那个“条件判断”默认为真
“收藏记录否”,可能是指在查询时,第一个表中“是否收藏”字段要为“非”
是不是还有"我的收藏"表?
目前只能提供根据用户号返回相应的邮件
create PROCEDURE [dbo].[Pr_T_Mail_User]
(
@UserId int
)
AS
SELECT
T_Mail_User.MailId,
T_Mail_User.UserId,
T_Mail_User.IsRead,
T_Mail_User.IsDelete,
T_Mail_User.MailType,
T_Mail_User.IsFavorite,
T_Mail.id,
T_Mail.Title,
T_Mail.Content,
T_Mail.SendTo,
T_Mail.CopyTo,
T_Mail.PrivateTo,
T_Mail.AllTo,
T_Mail.IsDelete,
T_Mail.SendDate,
T_Mail.UserId,
T_Mail.IsPrompt,
T_Mail.IsNote,
T_Mail.Affix
from
T_Mail_User
left join T_Mail on T_Mail_User.MailId=T_Mail.id
where
T_Mail_User.UserId=@UserId
未经测试