Вверх ↑
Этот топик читают: Гость
Ответов: 1528
Рейтинг: 57
#1: 2014-07-28 10:24:19 ЛС | профиль | цитата
нужно удалить несколько неизвестных строк

имеем таблицу
id | data | other_data

id идут не по порядку (ну по факту по порядку, но есть числовые промежутки)


нам нужно определить сколько сейчас строк в БД
затем, если их > 100 удалить самые старые определяя "возраст" по id (наиболее старые значения имеют меньший id), чтобы в сумме их осталось 100

т.е. нужен запрос который удаляет "излишки"

карма: 0

0
Ответов: 704
Рейтинг: 44
#2: 2014-07-28 12:13:14 ЛС | профиль | цитата
hitman249 писал(а):
нужно удалить несколько неизвестных строк

имеем таблицу
id | data | other_data

id идут не по порядку (ну по факту по порядку, но есть числовые промежутки)


нам нужно определить сколько сейчас строк в БД
затем, если их > 100 удалить самые старые определяя "возраст" по id (наиболее старые значения имеют меньший id), чтобы в сумме их осталось 100

т.е. нужен запрос который удаляет "излишки"


#sql
Delete From test where id in (select id from test Limit 0, 100 < (select count(*) from test));
карма: 0

1
файлы: 1code_34074.txt [101B] [69]
Голосовали:hitman249
Ответов: 1528
Рейтинг: 57
#3: 2014-07-28 17:43:05 ЛС | профиль | цитата
Kazbek17, ошибки
запрос писал(а):
DELETE FROM t1 WHERE id IN (SELECT id FROM t1 LIMIT 0, 100 < (SELECT count(*) FROM t1));


со стороны знака "<" подсвечено "В этом месте ожидается круглая скобка"
карма: 0

0
Ответов: 704
Рейтинг: 44
#4: 2014-07-28 18:03:57 ЛС | профиль | цитата
hitman249 писал(а):
со стороны знака "<" подсвечено "В этом месте ожидается круглая скобка"

Поправь У меня все тип-топ работает. да и при запросе можешь еще Order By прописать чтобы сорт прошло а потом удаление производила.
карма: 0

0
Ответов: 1528
Рейтинг: 57
#5: 2014-07-28 23:58:01 ЛС | профиль | цитата
#sql
SET @id = (SELECT id FROM test ORDER BY id DESC LIMIT 99, 1);
DELETE FROM test WHERE id < @id;
ALTER TABLE test DROP id, ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, AUTO_INCREMENT = 1;

Вот такая конструкция по надёжней, и везде работает.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#6: 2014-07-29 00:07:22 ЛС | профиль | цитата
hitman249, ни в жизни не стал бы удалять из БД "излишки", ставил бы галочку в в спецстолбце со смыслом "Я, hitman249, считаю эту запись не нужной" и подпись
карма: 19

0
Ответов: 1528
Рейтинг: 57
#7: 2014-07-29 21:54:10 ЛС | профиль | цитата
Леонид, заказчик предоставил только такой способ получения информации. Его дело.
Вас рассмешило слово "излишки"?

карма: 0

0
Ответов: 8930
Рейтинг: 823
#8: 2014-07-29 22:55:21 ЛС | профиль | цитата
hitman249, ну тогда понятно, кто платит, тот и заказывает
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#9: 2014-07-29 23:01:01 ЛС | профиль | цитата
hitman249 писал(а):
заказчик предоставил только такой способ получения информации.
Лечиться ему надо.
Если ты удаляешь колонку с ID и потом нумеруешь по-новому с 1, значит там ID ни нафик не нужно.
Вроде же в MySql есть и NUMROW, и ROWID.
А твою задачу можно решить и так:
1.

DELETE FROM test LIMIT (Select count()-100 from test);
OPTIMIZE TABLE test;
и так:
2.

CREATE TABLE test2 AS Test;
INSERT INTO test2 SELECT * FROM test DESC LIMIT 100;
DROP TABLE test;
ALTER TABLE test2 RENAME test;
Кстати о птичках
OPTIMIZE TABLE test; выполнит команды из пункта 2.

И перед этими действиями нужна проверка - а есть ли мальчик ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#10: 2014-07-29 23:40:49 ЛС | профиль | цитата
Tad,
там плеер делает запись в файл когда начинает играть новая песня, мой скрипт должен следить за этим текстовым файлом и показывать последние 100 песен на сайте.
запрос приведён в упрощённом виде, там больше столбцов.
id нужен, чтобы при разных выборках можно было ориентироваться где было "раньше".

карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#11: 2014-07-30 00:44:24 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-12 08:08:06
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#12: 2014-07-30 13:47:20 ЛС | профиль | цитата
Выше я.
hitman249 писал(а):
id нужен, чтобы при разных выборках можно было ориентироваться где было "раньше".
Какое "раньше" если ты перенумеровуешь ID ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#13: 2014-07-30 15:19:47 ЛС | профиль | цитата
Tad,
Tad писал(а):
Какое "раньше" если ты перенумеровываешь ID ?

1) я порядок не меняю, нет рандома.
2) так что раньше всегда будет раньше.
карма: 0

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)