Счетчик SQL и объединение из нескольких таблиц - PullRequest
0 голосов
/ 11 декабря 2011

Существует таблица продуктов, которая содержит все детали продукта.Продукт может быть номинирован на популярный стол, где разные люди могут голосовать за него.мне нужно считать только голоса зарегистрированных пользователей.В настоящее время он считает все голоса, которые имеет тот или иной продукт.Как мне преодолеть эту проблему?я вставил свой sql код ниже:

SELECT popular.name, popular.product_id, product.text, product.author, count(        vote.product_id ) AS votes
FROM popular
LEFT JOIN product ON ( product.id = popular.product_id )
LEFT JOIN vote ON ( vote.product_id = popular.product_id )
where popular.hidden = '1' and
popular.name in (select registered.name from registered 
where registered.course_id='".$course_id."' and 
registered.section = '".$section."' and 
registered.term = '".$term."')
GROUP BY popular.product_id
ORDER BY votes DESC Limit 10

Ответы [ 3 ]

0 голосов
/ 11 декабря 2011

Вам не хватает соединения между голосами и другими вашими столами

Select P.ID, P.text, count(v.Product_ID) as votes
FROM Product PRO
LEFT JOIN Popular Pop
  ON PRO.ID = Pop.Product_ID
LEFT JOIN VOTE V   --<-- This is missing
  on V.Product_ID = Pro.ID
Group by P.ID, Pro.Text
order by votes Desc
0 голосов
/ 11 декабря 2011
SELECT popular.product_id, product.text, count( vote.product_id ) AS votes
FROM popular, product, vote
WHERE product.id = popular.product_id AND product.id = vote.product_id
GROUP BY product.id
ORDER BY votes DESC

Обратите внимание, что этот запрос не возвращает продукты без голосов. Если в вашей БД есть такие записи, вам следует LEFT JOIN с vote таблицей.

0 голосов
/ 11 декабря 2011
SELECT pop.product_id, pd.text, count( vt.product_id ) AS votes
FROM popular pop
LEFT JOIN product pd ON(pd.product = pop.product_id)
LEFT JOIN vote vt ON(vt.product_id = pop.product_id)
WHERE 1 = 1 // or pop.product_id = yourProductId here
GROUP BY pop.product.id
ORDER BY vt.votes DESC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...