- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть таблица постов с трёмя полями:
* id
* rating
* type
Если я хочу выбрать 5 ТОПовых постов, то я пишу:
SELECT * FROM posts ORDER by rating DESC LIMIT 0,5
А как выбрать 5 ТОПов постов, чтобы у всех были уникальные типы? Поясню:
Мне надо сделать так, чтобы выбирались: 1, 2, 3, 4, 6. id = 5 не выбирается, т.к. это уже дубликат по type с id = 1.
Select DISTINCT(type),id,rating from posts ORDER BY rating DESC LIMIT 0,5
попробуйте так
Select DISTINCT(type),id,rating from posts ORDER BY rating DESC LIMIT 0,5
попробуйте так
Так не работает, т.к. выбирает те записи, где комбинация всех полей будет уникальна. В моём случае нужно сработать GROUP BY, но пока не представляю себе как...
Попробуйте так, если не сработает, напишите какая ошибка возвращается.
В PostgreSQL точно должно работать, использую в одном из своих проектов подобное.
Попробуйте так, если не сработает, напишите какая ошибка возвращается.
В PostgreSQL точно должно работать, использую в одном из своих проектов подобное.
Это не может быть правдой, т.к. rating в этом запросе вообще не задействован!
ijk, вы бы хоть немного сами подумали...
Задействуйте, в чем проблема?
ijk, вы бы хоть немного сами подумали...
Задействуйте, в чем проблема?
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
выдаёт какую то чушь. Помогите поправить, пожалуйста.
Я бы сделал вложенный запрос, но предупреждаю что я салага в sql, и возможно тут правильней использовать JOIN или еще что-то.
Я бы сделал вложенный запрос, но предупреждаю что я салага в sql, и возможно тут правильней использовать JOIN или еще что-то.
Через временные таблицы удалось провернуть всё, но скорость работы упала в 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(posts.id) AS id, type, rating FROM posts INNER JOIN rates USING(id) GROUP BY type ORDER BY rating DESC LIMIT 5
SELECT MAX(posts.id) AS id, type, rating FROM posts INNER JOIN rates USING(id) GROUP BY type ORDER BY rating DESC LIMIT 5
Увы, так не работает(( Думаю потому, что сначала идёт группировка, а потом уже упорядочивание по рейтингу.