SELECT MAX(id) AS id, type, (SELECT rating FROM rates WHERE id = posts.id) AS rating FROM posts GROUP BY type ORDER BY rating DESC LIMIT 5
Через временные таблицы удалось провернуть всё, но скорость работы упала в 100 раз((
ijk добавил 22.09.2011 в 18:30
Победа! Не факт, что оптимально, но приемлемо. Запрос:
SELECT MIN(posts.id), posts.type, rates.rating FROM posts, rates JOIN (SELECT MAX(rates.rating) as MaxR, type FROM posts, rates WHERE posts.id = rates.id GROUP BY type ORDER BY MaxR DESC LIMIT 5) as y ON rates.rating = y.MaxR
WHERE posts.id = rates.id
GROUP by type
ORDER by rates.rating DESC
LIMIT 5
Суть такова:
1. Считаем макс. рейтинг по каждому типу и выбираем пять различных типов с максимальными рейтингами (внутри JOIN).
2. Выбираем посты с такими же рейтингами и следим, чтобы тип оставался уникальным.
3. На всякий случай делаем LIMIT 5 в конце, если есть много разных статей с равными макс. рейтингами.
Вроде должно работать верно. Спасибо всем за обсуждение и вклад в решение проблемы!
SELECT MAX(id) AS id, type, rating FROM posts GROUP BY type ORDER BY rating DESC LIMIT 5
Toy, спасибо! Всё работает.
Только вот реальная ситуация сложнее, поэтому всё не работает опять. Структура немного сложнее...
Есть таблица posts:
* id
* type
Есть таблица rates:
* rating
между ними соответствие 1 <-> 1
Вот такой запрос:
SELECT MAX(posts.id) AS id, type, rating FROM posts, rates WHERE posts.id = rates.id GROUP BY type ORDER BY rating DESC LIMIT 5
выдаёт какую то чушь. Помогите поправить, пожалуйста.
SELECT MAX(id) AS id, type FROM posts GROUP BY type ORDER BY id DESC LIMIT 10
Это не может быть правдой, т.к. rating в этом запросе вообще не задействован!
Так не работает, т.к. выбирает те записи, где комбинация всех полей будет уникальна. В моём случае нужно сработать GROUP BY, но пока не представляю себе как...
Да, все страницы с шаблоном, прошиты в движок. Раньше были в структуре сайта, сейчас в них необходимость отпала в связи с реструктуризацией ресурса, но трафик с них сохранить хочется. Поэтому возникла идея их "изолировать", но не удалять — траф ведь лишним не бывает.
Можете скинуть подробности в ЛС, пожалуйста.
Все детали согласовали. Работаем.
Мысль интересная. А вы не владелец, случаем?
Это да. После введения там nofollow спамеры как раз переключились на добычу трафика. Сейчас они NF обратно сняли. Просто я к тому, что возможность публикации ссылок, к большому сожалению, провоцируют людей спамить, хотя задумывается всегда, что наоборот будут добавлять статьи более высокого качества.
Да, с написанием. Присылайте данные по вашему сайту в личку.