2014-09-19 2 views
0

Таким образом я получил этот запрос:SQL LEFT JOIN WHERE не отображается правильный результат

Структура данных: Пользователи идентификатор --- inlog ---- имя ---- больше материала

llntoets идентификатор --- код ---- ---- inlog больше вещей

oefeningen идентификатор --- --- статус плеер ---- morestuff

(inlog и плеер всегда одни и те же значения а пользователь)

SELECT 
// Some other stuff working 
SUM(o.status) AS oefn 
FROM users AS u 
LEFT JOIN  llntoets AS l 
ON (u.inlog = l.inlog) 
LEFT JOIN  oefeningen AS o 
ON (u.inlog = o.speler) AND o.status = 'afgewerkt' 
WHERE 
code = '$code' 
GROUP BY l.inlog 
ORDER BY klas ASC, klasnr ASC 

Все работает отлично, за исключением 1 вещи переменной oefn. Он показывает число, иногда оно показывает правильное значение, и иногда оно показывает значение, которое намного выше, чем должно быть. Кто-то сказал мне, что это может быть из-за GROUP BY. Может кто-нибудь помочь мне PLS?

Предполагается подсчитать общие записи из таблицы oefeningen, где status = 'afgewerkt', и где speler является inlog от пользователей. Спасибо, если у вас возникнут другие вопросы, попросите объяснить больше.

+3

У вас, вероятно, есть отношения 1: M, которых вы не ожидаете. Включите l.inlog в свой выбор, закажите его и удалите группу по инструкции. Теперь найдите один из значений l.inlog, который имел гораздо более высокий SUM, чем вы ожидали, и посмотрите, почему у вас есть эти строки, включенные в ваш выбор. – Carth

ответ

0

SUM(o.status) в вашем запросе не предполагается считать итоговые записи таблицы oefeningen.
эта сумма представляет собой сумму значений всех соединенных строк, которые удовлетворяют вашим критериям, которые могут быть гораздо более высоким числом.
также обратите внимание на то, что применение фильтра o.status = 'afgewerkt' выполняется JOIN, даже если вы написали LEFT JOIN throghout запрос.

+0

Эй, попытался изменить его и отредактировать SUM до COUNT, и сделал его. Но теперь у меня новая проблема, иногда она учитывает только строки со статусом «afgewerkt», и иногда он получает все строки. Есть идеи? – Thempower