- *sqlДан запрос: DELETE FROM items WHERE channel_id = :channel_id ORDER BY pub_date DESC OFFSET :number;
На некоторых системах SQLite, под которым это все, собран без подержки LIMIT/OFFSET в DELETE, поэтому надо переписать одним запросом. Мой вариант:
DELETE FROM items WHERE channel_id = :channel_id AND item_id IN (SELECT item_id FROM items WHERE channel_id = :channel_id ORDER BY pub_date DESC OFFSET :number);
Дискасс.
Это удаляет древние RSS'ки, есличо.from idead, 11 months ago
Replies (15)
- @part1zano:Вложенные запросы — это хуёво, в целом если работает, то похуйfrom quad16200141, 11 months ago
- @0xd34df00d:@part1zano Конечно хуево. Поэтому и дискасс, собсна. Оно еще не работает, я еще не впилил, мне и проверять не на чем — я постгрес юзаю )
- @part1zano:@0xd34df00d Я бы написал костыль, который генерит сто маленьких запросов, так-то.
- @part1zano:@0xd34df00d Блять. Скрипт на чём-нибудь, который селектит айдишники по лимиту, а по айдишникам (потом) удаляет.
- @0xd34df00d:@part1zano А. Да какая разница, все равно получаешь суммарно пересечение множеств, просто в твоем случае ты как бы ручками развернул один из двух циклов. Олсо, это все из цпп-кода вызывается, поэтому скрипт на чем-нибудь не катит )from idead, 11 months ago, in reply to /7
- @part1zano:@0xd34df00d Ну на цпп. Кстати, субъективно мне кажется, что мой костыль на цпп будет пошустрее вложенного запроса (хотя могу ошибаться, да)from quad16200141, 11 months ago, in reply to /10
- @0xd34df00d:@part1zano Хм. Пусть у нас N айдишников выберутся внутренним селектом и M айдишников всего. Забьем пока на индексы. В твоем случае для каждого айдишника из N будет проверено O(M) айдишников, получаем O(N×M). В моем — каждый айдишник из M будет сверен с N айдишниками из вложенного селекта — опять O(M×N). Порядок роста одинаков, весь вопрос в константе.
Просто дело в том, что хотелось бы делать это все одним запросом :3from idead, 11 months ago, in reply to /11 - @0xd34df00d:@akapetryxa Ога. Не, ну не обязывать же юзеров ставить постгрес, особенно под какой-нибудь там вендой.from idead, 11 months ago, in reply to /13