Запрос, который выводит итоги двух связанных таблиц, не возвращая итоги правильно, почему? - PullRequest
0 голосов
/ 27 сентября 2018

Здравствуйте, у меня есть следующая схема БД, 3 таблицы:

connected_accounts (fields: id, user_id, account_name)
contacts (fields: id, user_id, connected_account_id, type)
user_recommendations (fields: id, user_id, contact_id)

Я пытаюсь вывести запрос, который показывает для каждой записи connect_account в БД общее количество контактов и связанных с ним рекомендаций пользователя.,Вот что у меня есть:

SELECT 
    ca.id, 
    ca.user_id, 
    ca.account_name,
    COUNT(c.id) AS Total
FROM connected_accounts ca
LEFT JOIN contacts c
     ON ca.id = c.connected_account_id
       AND c.contact_type = 'email'
WHERE ca.resource_type = 'calendar.readonly'
ORDER BY ca.id DESC
LIMIT 8

Это не работает правильно ... Желаемый результат будет выглядеть так:

РЕЗУЛЬТАТЫ

id | user_id | account_name | Total Contacts | Total User Recommendations

Я еще не присоединился к рекомендациям пользователя, так как соединение контактов не работает должным образом.

Что я делаю неправильно в своем запросе?спасибо

ОБНОВЛЕНО:

SELECT 
    ca.id, 
    ca.user_id, 
    ca.account_name,
    COUNT(c.id) AS 'Total Contacts',
    COUNT(pr.id) AS 'Total User Rec.'
FROM connected_accounts ca

LEFT JOIN contacts c
     ON ca.id = c.connected_account_id
       AND c.contact_type = 'email'

LEFT JOIN user_recommendations pr
     ON ca.id = pr.connected_account_id

WHERE ca.resource_type = 'calendar.readonly'
GROUP BY ca.id, ca.user_id, ca.account_name
ORDER BY ca.id DESC
LIMIT 8

ОБНОВЛЕНО ВЫШЕ .. Вышеупомянутый обновленный запрос возвращает тот же # для Total Contacts & Total User Rec - число, которое совпадает соба - правильный номер для общего числа контактов. Total User Rec не возвращается ... почему?

1 Ответ

0 голосов
/ 27 сентября 2018

Вы пропустили GROUP BY.Попробуй это.Надеюсь, поможет.Кроме того, LEFT JOIN будет иметь все записи из таблицы connected_accounts, это то, что вы хотите?

SELECT 
    ca.id, 
    ca.user_id, 
    ca.account_name,
    COUNT(c.id) AS Total
FROM connected_accounts ca
LEFT JOIN contacts c
     ON ca.id = c.connected_account_id
       AND c.contact_type = 'email'
WHERE ca.resource_type = 'calendar.readonly'
GROUP BY ca.id, ca.user_id, ca.account_name
ORDER BY ca.id DESC
LIMIT 8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...