0

私は、ユーザーがログオンできる小さな php Web サイトを作成しています。機能の 1 つは、ユーザーが互いにメッセージを投稿できるようにすることです。メッセージの表は次のとおりです。

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.phpmessages

両方を組み合わせる方法があるので、ユーザー資格情報が一致しますが、未読メッセージの数も表示されます。mReciever フィールドを使用してメッセージ テーブルにユーザーへのメッセージを記録します。read は、既読かどうかを示す 1 または 0 のいずれかです。カウントステートメントは次SELECT COUNT(*) AS occurrences FROM messages WHERE mRead=0 and mReciever=$aId のとおりです。作成者のログオン 1 は、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 に答える