[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос на выбор лучшей записи пользователя
web-monster
Вообщем не могу понять как составить запрос. Нужно вывести самую популярную запись от пользователя в определённой категории, в таблице есть поле vote в нём хранится рейтинг, сейчас написал так, но не работает:
SELECT t1.*, t2.title FROM news_photo t1, news_cat t2 
WHERE t1.id_cat=t2.id GROUP by t1.id_cat ORDER by t1.vote DESC LIMIT 3

Пример таблицы:

id, id_cat, user, vote
1 10 dimon 115
2 10 vasya 130
3 11 dimon 120
4 11 lekars 240
5 11 dimon 115
6 12 valera 190
6 12 dimon 115

В итоге должно получиться 3 строки(3 категории всего) вида:
id, id_cat, user, vote
1 10 vasya 130
4 11 lekars 240
6 12 valera 190




Спустя 11 часов, 46 минут, 2 секунды (12.02.2011 - 12:39) Snus написал(а):
Кашу какую-то написал. Напиши точно что у тебя в таблице news_photo и news_cat

Спустя 50 минут, 43 секунды (12.02.2011 - 13:30) web-monster написал(а):
Таблица news_photo
id
id_cat - id категории
user - пользователь добавивший запись
text - текст записи
vote - голоса за новость
count_vote - кол-во проголосовавших

Таблица news_cat
id
title - заголовок категории
about - описании категории

Спустя 11 часов, 17 минут, 57 секунд (13.02.2011 - 00:48) Snus написал(а):
SELECT dbc.title, dbp.user. dbp.vote
FROM `news_photo` AS dbp
INNER JOIN `news_cat` AS dbc ON dbc.id = dbp.id_cat
ORDER BY dbp.vote DESC
LIMIT
3

Спустя 18 часов, 46 минут, 8 секунд (13.02.2011 - 19:34) web-monster написал(а):
при таком запросе он может вывести трёх человек из одной категории, а мне нужно из каждой категории выбрать лучшего

Спустя 14 часов, 7 минут, 22 секунды (14.02.2011 - 09:41) linker написал(а):
SELECT 
`t1`.*, `t2`.`title`
FROM
(SELECT MAX(`vote`) AS `maxvote` FROM `news_photo`) `t3`,
`news_photo` `t1`,
`news_cat` `t2`
WHERE
`t1`.`id_cat` = `t2`.`id` AND `t1`.`vote` = `t3`.`maxvote`
ORDER BY
`t1`.`vote` DESC
LIMIT
3

Спустя 3 часа, 35 минут, 38 секунд (14.02.2011 - 13:17) web-monster написал(а):
не работает, выводит только одну запись.
Если даже упросить есть таблица:
president
id, contry, name, vote
1 Russsia Путин 500
1 Russsia Медведь 700
1 Russsia Ельцин 400
1 USA Буш 200
1 USA Клинтон 300
1 USA Абама 150
1 France Саркози 800

В итоге должны получить:
Russia Медведь 700
USA Клинтон 300
France Саркози 800

Спустя 11 минут, 32 секунды (14.02.2011 - 13:28) linker написал(а):
Забыл дописать важный элемент и заодно сделал более внятно и понятно
SELECT 
`t1`.*, `t2`.`title`
FROM
(SELECT MAX(`vote`) AS `maxvote` FROM `news_photo` GROUP BY `id_cat`) `t3`,
`news_photo` `t1`
LEFT JOIN `news_cat` `t2` ON `t2`.`id` = `t1`.`id_cat`
WHERE
`t1`.`vote` = `t3`.`maxvote`
ORDER BY
`t1`.`vote` DESC
LIMIT
3

Спустя 10 часов, 18 минут, 16 секунд (14.02.2011 - 23:47) web-monster написал(а):
неа так тоже вывел не правильно, вывел
vote title
230 Россия
225 USA
105 Россия

А вот франция потерялась хотя у неё vote= 7 баллам

Спустя 9 часов, 59 минут, 29 секунд (15.02.2011 - 09:46) linker написал(а):
web-monster
Так, список данных выложи и результат запроса.

Спустя 24 минуты, 3 секунды (15.02.2011 - 10:10) Michael написал(а):
SELECT id, id_cat, user, vote
FROM `popular`
WHERE (id_cat, vote) IN (
SELECT id_cat, MAX(vote)
FROM `popular`
GROUP BY id_cat
)
GROUP BY id_cat


последний GROUP BY id_cat - это если в таблице два пользователя в одной категории с равным max значением vote
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.