Присоединиться к таблице голосов и суммировать все голоса - PullRequest
7 голосов
/ 07 июля 2011

У меня есть два стола.Один из них содержит кавычки, а другой перечисляет все данные голоса (либо +1, либо -1) для каждой цитаты.Для демонстрации я сделал упрощенные версии двух таблиц:

Котировки

+----+-----------------------------------------------------------------------+
| ID | quote                                                                 |
+----+-----------------------------------------------------------------------+
|  1 | If you stare into the Abyss long enough the Abyss stares back at you. |
|  2 | Don't cry because it's over. Smile because it happened.               |
|  3 | Those that fail to learn from history, are doomed to repeat it.       |
|  4 | Find a job you love and you'll never work a day in your life.         |
+----+-----------------------------------------------------------------------+

Голоса

+----+-------+------+
| ID | quote | vote |
+----+-------+------+
|  1 |     1 |   -1 |
|  2 |     1 |   -1 |
|  3 |     3 |    1 |
|  4 |     3 |   -1 |
|  5 |     3 |    1 |
|  6 |     3 |   -1 |
|  7 |     4 |    1 |
|  8 |     4 |    1 |
|  9 |     4 |    1 |
+----+-------+------+

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

+----+-----------------+------+
| ID | quote           | vote |
+----+-----------------+------+
|  1 | If you stare... |   -2 |
|  2 | Don't cry...    | NULL |
|  3 | Those that...   |    0 |
|  4 | Find a job...   |    3 |
+----+-----------------+------+

Как выглядит SQL-запрос, описанный ранее?

Ответы [ 6 ]

6 голосов
/ 07 июля 2011
SELECT
    `quotes`.`id` as `ID`,
    `quote`.`quote` as `quote`,
    SUM(`votes`.`vote`) AS `vote`
FROM  `quotes`
    LEFT JOIN `votes`
        ON `quotes`.`id` = `votes`.`quote`
GROUP BY `quotes`.`id`

должен помочь.

Предполагая, что id столбцы являются первичными ключами (они уникальны для каждой записи).

2 голосов
/ 07 июля 2011
SELECT
  ID, quote, (SELECT sum(vote) from votes where votes.quote=quotes.ID)
FROM 
  quotes 
0 голосов
/ 07 июля 2011
SELECT Quotes.ID ID, Quotes.QUOTE QUOTE, SUM(Votes.vote) VOTE FROM Quotes LEFT JOIN Votes ON Votes.quote = Quotes.id 
0 голосов
/ 07 июля 2011
Select q.id, q.quote, sum(v.vote) from
quotes q
inner join votes v on
q.id= v.quote
group by v.quote
0 голосов
/ 07 июля 2011

Следующее должно работать. Левое объединение означает, что итоги голосования включены, даже если нет строки.

select ID, quote, total_votes from quotes
left join 
(select quote, sum(vote) as total_votes from quotes
 group by quote) ) as vote_totals
on quotes.ID = vote_totals.quote
0 голосов
/ 07 июля 2011
SELECT q.id, q.quote, SUM(v.vote ) as summ
FROM Quotes q 
LEFT JOIN Votes v ON q.id=v.quote 
GROUP BY q.id, q.quote                                                                 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...