2015-05-16 5 views
0

Я пытаюсь подсчитать количество посещений профиля, но он подсчитывает неправильный номер. В следующем примере должно быть 3 посещения, но оно считается 6! Кто-нибудь знает, что с ним не так? http://sqlfiddle.com/#!9/b43ea/8SQL - COUNT() подсчитывает неправильный номер

SELECT *, 
COUNT(profile_visitors.profile_id) AS visitorCount 
FROM profile_visitors 
LEFT JOIN user_login ON user_login.user_id = profile_visitors.user_id 
WHERE profile_visitors.user_id = 1 
+1

у вас есть две строки с user_id = 1 в таблице uSER_LOGIN, поэтому после того, как присоединиться к вам будет 2 * 3 = 6 строк. Может быть, вторая строка таблицы user_login предназначена для хранения еще одного user_id? – jpw

+0

ваша скрипта sql имеет неверные данные для таблицы user_login ..... у нее есть дубликат userid 1 два раза – HaveNoDisplayName

+0

Зачем вам нужно присоединяться к таблице входа, чтобы получить подсчет посещений профиля? Вы можете получить общее количество или количество пользователей для всех пользователей профиля. Если вы хотите отображать информацию о пользователе со счетчиком, вам нужно сначала заполнить группу и присоединиться к таблице пользователей (а не таблице user_login) позже. – Tim3880

ответ

1

Вы должны Group By считать несколько строк, Так возьмите звезду из вашего запроса и добавить группу по user_id также делают profile_visitors. *

+0

Хотя это хороший совет (за исключением последней части), это не решит проблему, вызванную дублирующимися данными. – jpw

+0

вы можете выполнить свой запрос здесь: http://sqlfiddle.com/#!9/b43ea/8 –

+1

@jpw: - Я думаю, что OP имеет опечатку, помещая данные в таблицу 'user_login', где OP ошибочно ставит userid 1 два раза – HaveNoDisplayName

0

вы можете использовать WHERE IN() для сравнения, если существуют в user_login

SELECT *, 
COUNT(profile_visitors.user_id) AS visitorCount 
FROM profile_visitors 
WHERE profile_visitors.user_id IN (SELECT user_id FROM user_login) 

результат:

id user_id profile_id   visit_date    visitorCount 
1 1    1   May, 10 2015 15:26:46   3 
+1

О, _try this_ - отличное объяснение :) – dbf

+0

Давайте надеяться, что OP не использует версию MySQL> = 5.7.5, которая сделает этот запрос завершенным, поскольку он полагается на нестандартное поведение, которое было отключено в более поздних версиях. – jpw

+1

@DyrandzFamador Он работает в текущем общем выпуске, хотя так и не проблема, но может быть и в будущем. Соответствующая часть руководства для справки: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html – jpw

1

LEFT JOIN в таблице user_login не дает никакой пользы этому вопросу, но следующий запрос даст вам подробную информацию, которую вы хотите видеть (при условии, что вы хотите видеть только количество посещений для user_id = 1):

SELECT COUNT(profile_visitors.profile_id) AS visitorCount 
FROM profile_visitors 
WHERE profile_visitors.user_id = 1 
GROUP BY profile_visitors.profile_id 

Чтобы увидеть все визиты использования профиля:

SELECT profile_id, COUNT(profile_visitors.profile_id) AS visitorCount 
FROM profile_visitors 
GROUP BY profile_visitors.profile_id 
+0

Спасибо, ваш snippit в сочетании со снопом jpw, использующим DISTINCT, решил проблему. Спасибо eveybody за помощь! – GeenId

Смежные вопросы