1
上記の表から、parent_id = 0、sender_idまたはreceiver_idがすべて私のログインIDと等しいすべてのメッセージを含むリストを抽出したかったのです。同じMYSQLクエリの親子メッセージ
Table:Messages
id | parent_id | sender_id | receiver_id | subject | message | read
これは簡単だったが、私は= 0
PARENT_IDは、私はこの試みたメッセージのためにすべての子メッセージをカウントする方法を見つけ出すことができませんでした:私はできませんでした
$my_messages = mysql_query("
SELECT
messages.id, messages.sender_id, messages.receiver_id, messages.subject, messages.message, messages.minute,
messages.hour, messages.day, messages.month, messages.year, COUNT(*) as 'mcount'
FROM messages
LEFT JOIN messages AS mchild ON mchild.parent_id = messages.id
WHERE(messages.sender_id='$login_session' or messages.receiver_id='$login_session')
and messages.parent_id = '0'
ORDER BY messages.year DESC, messages.month DESC, messages.day DESC, messages.hour DESC, messages.minute DESC
");
追加のものを私はどのparent_id = 0のすべての子+親メッセージをどのように数えるのですか?sender_id = $ login_idの場合はread = 1、receiver_id = $ login_idの場合はread = 1
ここに例があります:
Table:Messages
id | parent_id | sender_id | receiver_id | subject | message | read
1 | 0 | Paul | John | Test | Test | 0
2 | 0 | Paul | Chris | Test | Test | 0
3 | 1 | john | Paul | Test | Test | 0
4 | 1 | Paul | John | Test | Test | 1
5 | 1 | John | John | Test | Test | 0
6 | 0 | Paul | Jack | Test | Test | 0
は出力:
ID:1 - 4 messages (1 parent+ 3 children), $unread=1 because read = 1 for ID:4 wich is a child for ID:1
ID:2 - 1 message
ID:6 - 1 message
これは良いスタートですが、0人の子供を持つ両親を出力しません....私も変更されました。 AND m1.id = 0かつAND m1.parent_id = 0である。 parent_id = 0でなくても、すべての親をどのように出力するかについての考え方はありますか? –
INNER JOINをLEFT JOINに変更しても問題ありません。 (asigned parent_idにエラーがないと仮定します)。 $ login_sesionのメッセージだけを出力するようにするには、このAND(m2.sender_id = '$ login_session'またはm2.receiver_id = '$ login_session')を付けましたが、子を持たない親は表示されません。古い問題です...私は内側の結合の代わりにLEFT JOINを使ってあなたの体を使用します。 –