mysql: как ВНУТРИ присоединиться к таблице, но ограничить объединение до 1 результата с наибольшим количеством голосов или счет? - PullRequest
1 голос
/ 15 сентября 2009

У меня есть 2 таблицы. Один - это предметы, а другой - голоса за эти предметы.

Items table has: |item_id|name|post_date
Votes table has: |votes_id|item_id|answer|total_yes|total_no

То, что я хочу сделать, это показать все элементы на основе post_date и показать ответ в таблице голосов с HIGHEST total_yes. Поэтому я хочу показать только ОДИН ОТВЕТ из таблицы голосов с наибольшим количеством голосов total_yes.

Я пытался:

SELECT a.*, b.* FROM Items a
INNER JOIN Votes b ON a.item_id = b.item_id
GROUP by a.item_id
ORDER by a.post_date DESC, b.total_yes DESC

Но это не работает.

Результат, который я хотел бы видеть:

<item><answer><yes votes>
Buick | Fastest | 2 yes votes
Mercedes | Shiny | 32 yes votes
Honda | Quick | 39 yes votes

Любая помощь приветствуется!

Ответы [ 2 ]

8 голосов
/ 15 сентября 2009
SELECT a.*, b.*
  FROM Items a
       LEFT JOIN Votes b on a.item_id = b.item_id
                         and b.total_yes = (select max(total_yes) 
                                              from Votes v 
                         where v.item_id = a.item_id)
ORDER BY a.post_date DESC, b.total_yes DESC

N.B .: если у вас есть для элемента 2 ответа с одинаковым total_yes = max, у вас будет 2 строки для этого элемента.

0 голосов
/ 15 сентября 2009

добавьте LIMIT 1 в конец вашего запроса:)

, что займет только одну запись, но в тот момент, когда вы упорядочиваете по дате первым, вы получите наибольшее количество голосов за последнюю дату голосования. Это то, что вы хотите?

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

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