ijk

ijk
Рейтинг
199
Регистрация
19.08.2007
Toy:
Я бы сделал вложенный запрос, но предупреждаю что я салага в sql, и возможно тут правильней использовать JOIN или еще что-то.
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 в конце, если есть много разных статей с равными макс. рейтингами.

Вроде должно работать верно. Спасибо всем за обсуждение и вклад в решение проблемы!

Toy:
ijk, вы бы хоть немного сами подумали...
Задействуйте, в чем проблема?
SELECT MAX(id) AS id, type, rating FROM posts GROUP BY type ORDER BY rating DESC LIMIT 5

Toy, спасибо! Всё работает.

Только вот реальная ситуация сложнее, поэтому всё не работает опять. Структура немного сложнее...

Есть таблица posts:

* id

* type

Есть таблица rates:

* id

* 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

выдаёт какую то чушь. Помогите поправить, пожалуйста.

Toy:
SELECT MAX(id) AS id, type FROM posts GROUP BY type ORDER BY id DESC LIMIT 10

Попробуйте так, если не сработает, напишите какая ошибка возвращается.
В PostgreSQL точно должно работать, использую в одном из своих проектов подобное.

Это не может быть правдой, т.к. rating в этом запросе вообще не задействован!

rammlied:
Select DISTINCT(type),id,rating from posts ORDER BY rating DESC LIMIT 0,5
попробуйте так

Так не работает, т.к. выбирает те записи, где комбинация всех полей будет уникальна. В моём случае нужно сработать GROUP BY, но пока не представляю себе как...

Алексей Питерский:
уточняющий вопрос: а страницы в движок сайта прошиты (шаблон одинаковый)?

Это лишнее подозрение к сайту. Есть нездоровая тенденция создания дорвеев на ломе.......

Да, все страницы с шаблоном, прошиты в движок. Раньше были в структуре сайта, сейчас в них необходимость отпала в связи с реструктуризацией ресурса, но трафик с них сохранить хочется. Поэтому возникла идея их "изолировать", но не удалять — траф ведь лишним не бывает.

tokareff:
И мне бы под акцию 🙄

Можете скинуть подробности в ЛС, пожалуйста.

Krick:
буду вторым тогда...

Все детали согласовали. Работаем.

Turbo:
Директ дает подробную статистику Яндексу по поведению пользователей на сайте. И если сайт выглядит не слишком белым и пушистым, может привести к АГС. Ну это так мысли....

Мысль интересная. А вы не владелец, случаем?

hdaswet:
Кроме яндекса есть еще и google. Кроме того, у pisali.ru довольно неплохая посещаемость, что может способствовать привлечению трафика на свои сайты. Так что думаю, что толк размещения еще есть.

Это да. После введения там nofollow спамеры как раз переключились на добычу трафика. Сейчас они NF обратно сняли. Просто я к тому, что возможность публикации ссылок, к большому сожалению, провоцируют людей спамить, хотя задумывается всегда, что наоборот будут добавлять статьи более высокого качества.

R34-zevs:
С написанием? Если да, запишусь.

Да, с написанием. Присылайте данные по вашему сайту в личку.

Всего: 547