@StynuBlizz

Как сделать запрос в БД на удаление строк,с вычислением?

В БД есть таблица в которой есть поля
BLOCK_NUMBER | POST | RATING
1 | ... | 3
1 | ... | 5
1 | ... | 2
2 | ... | 7
2 | ... | 5
И так далее.

BLOCK_NUMBER - Это обозначения в каком блоке находиться пост,в каждом блоке может быть от 2 постов,а блоков этих может быть от 2 и больше.

Так вот,мне нужно сделать запрос который пройдеться по всей этой таблице и удалит все посты для каждого блока,оставив только те у которых самый большой рейтинг, т.е если например сделать такой запрос по примеру таблицы выше,то отстанутся только строки 2 и 4. Подскажите как такой запрос сделать?
  • Вопрос задан
  • 223 просмотра
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
по примеру таблицы выше,то останутся только строки 2 и 4
Начнём с простого: у таблиц нет номеров строк, есть только порядок сортировки. Поэтому вы должны их однозначно идентифицировать (способов множество, например, самый простой — автоинкрементный целый ID).
те у которых самый большой рейтинг
Составляете запрос, группируя по блокам и вычисляя максимальное значение рейтинга. Используйте его как под-запрос при удалении и оператор IN, чтобы не удалять записи, которые ему ответствуют.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
DELETE `t`.*
  FROM (
    SELECT `BLOCK_NUMBER`, MAX(`RATTING`) AS `rating`
    FROM `table`
    GROUP BY `BLOCK_NUMBER`
  ) AS `t1` 
  JOIN `table` AS `t` ON `t`.`BLOCK_NUMBER` = `t1`.`BLOCK_NUMBER`
    AND `t`.`RATTING` != `t1`.`rating`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы