total_files
とtotal_notes
が返されたときに両方が同じであるため、SUM
関数を使用して3つのテーブルから行を数えようとしていますが、少なくとも1つのファイルがあり、total_files
はそれがなぜそれをしているのかわからないtotal_notes
と同じ値を取るでしょう。SUMを使用して関連するレコードを持つ3つのテーブルをカウントする
レコードの行ごとにレコードに割り当てられた合計ファイル数、合計メモ数、合計連絡先数を含むレコードリストとして返される各レコードに関連する行数をカウントする必要があります(ファイル、メモや連絡先はカウントされただけで表示されません)。
私のクエリを以下に示します。
SELECT rec.street_number,
rec.street_name,
rec.city,
rec.state,
rec.country,
rec.latitude,
rec.longitude,
LEFT(rec.description, 250) AS description,
usr.username,
usr.full_name,
ppl.person_id,
ppl.first_name,
ppl.last_name,
SUM(IF(rlk.record_id = rec.record_id, 1, 0)) AS total_contacts,
SUM(IF(files.record_id = rec.record_id, 1, 0)) AS total_files,
SUM(IF(notes.record_id = rec.record_id, 1, 0)) AS total_notes,
(
SELECT COUNT(DISTINCT rec.record_id)
FROM records rec
WHERE rec.marked_delete = 0 AND rec.is_archive = 0
) AS total_records
FROM
(
records rec
INNER JOIN members usr ON rec.user_id = usr.user_id
LEFT OUTER JOIN record_links rlk ON rec.record_id = rlk.record_id
LEFT OUTER JOIN people ppl ON ppl.person_id = rlk.person_id AND rlk.record_id = rec.record_id
LEFT OUTER JOIN files files ON files.record_id = rec.record_id
LEFT OUTER JOIN notes notes ON notes.record_id = rec.record_id
)
WHERE rec.marked_delete = 0 AND rec.is_archive = 0
GROUP BY rec.record_id
ORDER BY rec.submit_date DESC
LIMIT 0, 25
基本的にあなたが見ることができるように、これらの表から来ている関連する行をカウントしますが、私は真剣にtotal_files
のだろうか理解していない SUM
がありますtotal_notes
と同じ値を取っている私はここで何か間違っていますか?
注 - 'total_contacts'列についても同じです。 –
Whoa!この詳細な回答をいただきありがとうございます。私はあなたに10倍の親指を与えることができました。再度、感謝します。 – MacMac