2015-01-26 2 views
0

Я хочу показать общее сообщение, где нравится 3 или больше;Выберите счет с суммой

У меня есть 3 таблицы

Таблица пост:

id_post | title 
1  | Ganteng 
2  | serigala 

Таблица Пользователь

id_user | username 
1  | mantan 
2  | otong 
3  | pak_pol 

Таблица голосов:

id_vote | id_post | LIKE | id_user 
1  | 1  | 1 | 2 
2  | 1  | 1 | 1 
3  | 1  | 1 | 3 
4  | 2  | 1 | 1 
5  | 2  | 1 | 2 
6  | 2  | 1 | 3 

Вот мой запрос:

$sql="SELECT COUNT(v.id_post) as total_post 
FROM vote v 
LEFT JOIN post p ON p.id_post=v.id_post 
HAVING SUM(`like`) >= 3"; 

В мои ожидания, значение $ SQL должно быть 2 ... Но возвращение стоимости составляет 6

Любой ответ?

Большое спасибо

+0

Вот почему ваш запрос не работает: 'COUNT (v.id_post)' подсчитывает все почтовые идентификаторы, которые не нуль, это верно для всех идентификаторов почтовых, т.е. все записи, т.е. 6. 'SUM (like)', добавляет все одинаковые значения, то есть 6 x 1 = 6. Это значение = = 3, поэтому вы показываете счетчик записей (6). В основном отсутствующий запрос - это предложение GROUP BY на идентификаторе сообщения, чтобы запрашивать голоса * за * идентификатор сообщения. –

ответ

0

Есть два шага, чтобы сделать:

  1. Найти все сообщения с более чем двумя подобными. (Так что по почте и посмотреть, есть ли у него более двух понравившихся.)
  2. Подсчитайте эти посты.

Запрос:

select count(*) 
from 
(
    select id_post 
    from vote 
    group by id_post 
    having count(*) >= 3 
) well_liked_posts; 
+0

он дает ошибку, как это 'каждая производная таблица должна иметь свой собственный псевдоним'. –

+0

О, извините, некоторые dbms требуют этого. См. Мой отредактированный ответ. Я дал производной таблице псевдоним «голосов». –

+0

Спасибо, что согласился. Я меняю псевдоним, хотя, поскольку это не голоса, которые я выбираю из зала для голосования, но хорошо понравились сообщения. Поэтому я изменяю псевдоним от «голосов» до «well_liked_posts». –

0

то, что вы ищете Distinct Count. Для Distinct, какой бы ни был правильный синтаксис SQL, который вы используете, используйте это.

В ответ на справедливый комментарий Jens Как и в качестве ключевого слова, я использовал квадратные скобки, чтобы квалифицировать его. Используйте соответствующий синтаксис на вашем языке, чтобы квалифицировать имена полей, которые являются возможными ключевыми словами.

$sql="SELECT COUNT(***DISTINCT*** p.id_post) as total_post 
FROM post p 
LEFT JOIN vote v ON p.id_post=v.id_post 
HAVING SUM([like]) >= 3"; 
+0

все еще дает результат = 3 –

+0

Просто заметил тег mysql на ваш вопрос (я предположил, что SQL-сервер, извините). Я думаю, что в MySql у Различного слова не должно быть собственных круглых скобок? Как и в http://stackoverflow.com/questions/5737628/mysql-count-distinct: Отредактировал мой ответ, чтобы удалить фигурные скобки вокруг отдельной фразы. –

+0

, пожалуйста, уточните мой вопрос об обновлении –

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