2011-07-04 6 views
2

基本的なSQL文を超えるものは何でもあり、私の強みはありません。PHPで内部結合を使用したメッセージへの返信件数を表示

私は、別のメッセージの代わりに1つのメインメッセージに返信し、参加しているすべてのメッセージが1つの場所に表示される、Facebookのようなものです。

メールテーブル:

  • MAILID
  • MAILUSER:メッセージを送信した人
  • のmailto
  • mailUnread:1 mailSubject
  • 未読
  • ある
  • mailBody
  • mailCurrency
  • mailTime
  • mailDeleted:

    • mailreplyID
    • mailreplyUser:
    • mailreplyDeletedを返信いるユーザー:1が
    • mailreplyToを削除された1がmailreplyテーブルの

    関連フィールドを削除されます:返信するメッセージのID:

オリジナルそれはそれが応答の数を数えずにうまくいったように私はそれをコード化しましたが、私はそれを含めることが有用であると決めました。

これは私がもともと持っていたものです:

SELECT 
    a.mailID, 
    a.mailUser, 
    a.mailTo, 
    b.username AS usernamea, 
    c.username AS usernameb 
FROM 
    mail a, users b, users c 
WHERE 
    (a.mailUser = b.id OR a.mailUser = c.id) 
    AND (a.mailTo = '".$id."' OR a.mailUser = '".$id."') 
    AND a.mailDeleted = '0' 
GROUP BY a.mailID 
ORDER BY a.mailID DESC 

これは私の試みであった:あなたがに参加する必要があり

SELECT 
    a.mailID, 
    a.mailUser, 
    a.mailTo, 
    b.username AS fromUsername, 
    c.username AS toUsername, 
    count(d.mailReplyID) as mailCount 
FROM 
    mail a 
    INNER JOIN users b ON b.id=a.mailUserId 
    INNER JOIN users c ON c.id=a.mailTo 
    LEFT JOIN mailreply d 
    ON d.mailreplyTo = a.mailID 
WHERE 
    (a.mailTo = '".$id."' OR a.mailUser = '".$id."') 
    AND a.mailDeleted = '0' 
GROUP BY a.mailID 
ORDER BY a.mailID DESC 

SELECT 
    a.mailID, 
    a.mailUser, 
    a.mailTo, 
    b.username AS usernamea, 
    c.username AS usernameb 
FROM 
    mail a, users b, users c 
    LEFT JOIN mailreply d 
    ON d.mailreplyTo = a.mailID 
WHERE 
    (a.mailUser = b.id OR a.mailUser = c.id) 
    AND (a.mailTo = '".$id."' OR a.mailUser = '".$id."') 
    AND a.mailDeleted = '0' 
GROUP BY a.mailID 
ORDER BY a.mailID DESC 

おかげ

+0

こんにちはRebecca、Stack Oveflowへようこそ!あなたの2回目の試みはうまくいったのですかエラーや予期しない結果がありましたか? –

+0

悲しいことに、私は "提供された引数が有効なMySQLの結果リソースではありません"というエラーを受け取ります。私は問題が何であるか分かりませんし、運がないまま物事を変えようとしています。 –

+0

私はあなたの質問から、この問題を解決するために重要だったように見えなかった列を削除する自由を取った、あなたが気にしないことを願っています。これを考え出した。また、あなたが言ったエラーは、PHPエラーのように聞こえる...あなたはMySQL自体から何かエラーを取得しましたか? –

答えて

0

はこれを試してみてください各側のusers表ユーザー名を取得するメッセージの私は、現在のユーザーが結合仕様を持つ送信者か受信者かを確認するためにwhere句を混乱させていたと思います。これは、カンマで表を区切り、where句に結合仕様を入れるのではなく、INNER JOIN構文を使用するのに適しています。

正しくメールIDをグループ化し、mailreplyテーブルのカウント列に追加します。このテーブルが結合されたままになっているので、あなたも正しかったです。返信数が0のメッセージも返されます。

あなたのためにそれを並べ替えることを望む - あなたはほぼそこにいました!

James

関連する問題