Я пытаюсь использовать функцию SUM
для подсчета строк из 3 таблиц, которые, однако, не работают эффективно, так как возвращаются total_files
и total_notes
, они оба одинаковы, когда существует хотя бы один файл, а затем total_files
будет принимать то же значение, что и total_notes
, и я не понимаю, почему он это делает.Использование SUM для подсчета трех таблиц с соответствующими записями
Он должен подсчитывать количество строк, относящихся к каждой записи, которые получат возврат в виде списка записей с подсчетом общего количества файлов, итоговых заметок и общих контактов, назначенных записи в каждой строке записи (данные файлов, заметки и контакты не отображаются только для подсчета).
Мой запрос показан ниже:
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
В принципе, как вы можете видеть, что есть три SUM
, которые будут учитываться соответствующие строки, исходящим из этих таблиц, но я серьезно не понимаю, как total_files
бы принимая то же значение, что и total_notes
, что-то не так я здесь делаю?
Примечание. Это же соглашение для столбца total_contacts. –
Будь! Большое спасибо за этот подробный ответ, хотелось бы, чтобы я мог дать вам 10-кратные пальцы! Еще раз спасибо. – MacMac