SQL-запрос: УДАЛИТЬ все строки, за исключением самых последних хх - PullRequest
2 голосов
/ 26 февраля 2010

Я пишу скрипт для регулярной проверки RSS-каналов, и мне нужно удалить старые статьи. Я наткнулся на этот ответ, который кажется очень близким к тому, что я ищу: SQL-запрос: Удалить все записи из таблицы, кроме последних N?

Мне нужно аналогичное решение, которое работает таким же образом, за исключением того, что оно сохраняет N статей на канал (а не N статей в целом). Каждая статья имеет поле с именем «RSSFeedID», которое ссылается на конкретный канал в другой таблице. Поэтому для каждого RSSFeedID мне нужно хранить только N статей.

Есть идеи, как это сделать? Либо сырой запрос SQL, либо код LINQ-to-SQL были бы очень полезны. Спасибо!

Ответы [ 2 ]

1 голос
/ 26 февраля 2010

Если ваши две таблицы называются RSSFeeds, RSSPosts, вот как вы можете это сделать. Псевдокод предоставляется.

idList = query("SELECT unique id FROM RSSFeeds");
for each id in idList
    query("
    DELETE FROM RSSPosts 
    WHERE id NOT IN 
        (SELECT id 
         FROM RSSPosts 
         WHERE RSSFeedId = @id
         ORDER BY id DESC 
         LIMIT 10)
    ");
end
0 голосов
/ 26 февраля 2010

Это перебор. Почему бы не сделать это отдельно для каждого канала, когда вы добавляете новую статью в определенный канал, используя тот же подход?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...