2013-05-29 5 views
1

У меня есть база данных, которая содержит некоторые данные изображения и таблицу ссылок. Таблицы нароста, как это:Mysql выбрать максимальное максимальное значение суммы

---pictures--- 
picid Lat Lon 
1  5 6 
2  7 31 
3  31 43 
4  -3 35 

---user2pictures--- 
picid userid vote 
1  1  1 
1  2  1 
3  1  -1 
3  2  1 
4  2  -1 

В таблице фотографий содержит удостоверение личности с фотографией и некоторые данные об изображении, табличные user2votes содержит данные голосования из изображений. Каждый пользователь может голосовать на изображениях, но они могут голосовать только один раз, поэтому голосование будет либо 1 (например), либо -1 (не нравится).

Я хочу выбрать все из таблицы картинок с картинками с наибольшим количеством голосов. Pseudoquery, который мог бы лучше объяснить, что я хочу: SELECT * FROM pictures WHERE (SELECT MAX(SUM(vote)) FROM user2pictures LIMIT 12

В этом примере изображение 1 вернется вверху, изображение 3 будет следовать, а изображение 4 будет последним. Я действительно не знаю, как это решить, некоторая помощь в правильном направлении была бы очень оценена!

Спасибо!

ответ

4

Ответ на JOIN таблицы, SUM голоса и ORDER высокого к низкому по сумме голосов

SELECT pictures.*, SUM(user2pictures.vote) AS VoteTotal 
FROM pictures 
JOIN user2pictures ON pictures.picid = user2pictures.picid 
GROUP BY pictures.picid 
ORDER BY VoteTotal DESC 
LIMIT 12 
+0

Спасибо большого за ваш очень быстрый ответ, отлично работает! – Jef

4

попробовать этот

select p.`picid`, `Lat`, `Lon` from pictures p 
    inner join user2pictures u2p 
    on p.picid = u2p.picid 
    group by u2p.picid 
    order by sum(vote) desc 
    limit 12 

DEMO

+0

Спасибо за ваш вклад! Также спасибо за демонстрацию, я не знал, что такая вещь существует, очень полезна для тестирования. – Jef

+1

добро пожаловать! :). –

2

Я предполагаю, что вы также хотите показать фотографии без голосования. Таким образом, вы можете попробовать это:

select 
    p.picId, sum(v.vote) as votes 
from 
    pictures as p 
    left join user2pictures as v on p.picId = v.picId 
group by 
    p.picId 
order by 
    sum(v.vote) desc 
limit 12; 

left join что позволяет показывать фотографии без каких-либо голосов (столбец votes будет иметь значение 0)

Надеется, что это помогает

+0

Спасибо за ваш вклад :) – Jef

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