mysql - 从一个表登录用户并计算同一语句中另一个表的出现次数

标签 mysql sql select count

我正在制作一个小型 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 字段在 messages 表中记录用户的消息,read 可以是 1 或 0 来指示已读或未读。计数语句为:SELECT COUNT(*) AS events FROM messages WHERE mRead=0 and mReciever=$aId,作者登录是一个简单的select * fromauthors,其中用户和密码匹配。

最佳答案

尝试

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

关于mysql - 从一个表登录用户并计算同一语句中另一个表的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15514263/

相关文章:

mysql - 如何在同一函数中读取添加到表中的行?

mysql - 如何用sql搜索字母 'å'

mysql - 选择计数索引

php - 选择随机但有限制并不总是有效

mysql - Rails 没有使用 database.yml 中提供的密码

php - 如何一次将多个值发送到 Web 服务器

mysql - Doctrine2 按多对多关系过滤结果

sql - 在MS Access中使用CCur()时如何处理错误 “#Error”

MYSQL 关系查询问题

mysql - SUM 使用子查询