0

我正在制作一个允许用户登录的小型 php 网站,其中一个功能是它允许他们互相发布消息。消息表描述如下:

msgId   int(20) NO  PRI NULL    auto_increment
mSender int(20) NO  MUL NULL    
mReciever   int(20) NO  MUL NULL    
mTitle  tinytext    NO      NULL    
mBody   mediumtext  NO      NULL    
mRead   tinyint(4)  NO      NULL    
mDate   datetime    NO      NULL    

当用户登录时,他们将根据存储在此表中的详细信息进行身份验证:

aId int(20) NO  PRI NULL    auto_increment
aUser   varchar(30) NO  UNI NULL    
aPass   varchar(40) NO      NULL    
aEmail  varchar(30) NO  UNI NULL    
aBio    mediumtext  YES     NULL    
aReg    datetime    NO      NULL    

我使用select语句将结果集与用户提供的凭据进行比较,如果经过身份验证,我想在header.php文件中显示一些状态,例如有多少消息(如果有),我能够做到这一点的唯一方法是通过在messages表上单独选择计数。

是否有一种方法可以将两者结合起来,以便匹配用户凭据,但还会显示未读消息的数量。我使用 mReciever 字段在消息表中为用户记录消息,读取可以是 1 或 0 表示已读或未读。计数语句是:SELECT COUNT(*) AS occurrences FROM messages WHERE mRead=0 and mReciever=$aId 作者登录是一个简单的select * from authors用户和密码匹配的地方。

4

1 回答 1

1

尝试

SELECT a.aId,
       a.aEmail,
       a.aBio,
       a.aReg,
       (SELECT COUNT(*) 
          FROM messages 
         WHERE mRead=0 AND mReciever=a.aId) occurrences
  FROM authors a
 WHERE a.aEmail = 'email@mail.com' AND a.aPass = '*****'

这是SQLFiddle

于 2013-03-20T02:44:55.627 回答