Új hozzászólás Aktív témák

  • bpx

    őstag

    válasz Speeedfire #1167 üzenetére

    PHP-t erre felejtsd el, adatok ilyen szintű manipulációját az adatbázis végezze, ne a hozzá kapcsoló alkalmazás

    ez 1, azaz egy darab színtiszta SQL utasítás:

    DELETE FROM tabla WHERE id IN(
    SELECT id FROM(
    SELECT id, RANK() OVER (PARTITION BY uid ORDER BY time DESC) r FROM tabla)
    WHERE r > 500);

    magyarázat:

    a legbelső select partíciókat képez a táblából az uid alapján, és a partíciókat idő szerint (time) csökkenő sorrendbe rendezi, és minden egyes id-hoz rendel egy sorszámot (rank), hogy adott partícióban a rendezés szempontja szerint hanyadik helyen áll

    az eggyel kintebb levő select lekérdezi azokat az id-kat, ahol ez a "rang" 500-nál nagyobb, tehát kívül esik a kívánt limiten

    a delete meg törli az ilyen id-val rendelkező sorokat

    szerk: adatbáziskezelőt mondjuk nem írtál, ez Oracle-ben működik, én a tábládból úgy tippelem hogy MS SQL (auto increment PK, meg int típus), de ezek a funckiók mintha ott is meglennének

    [ Szerkesztve ]

Új hozzászólás Aktív témák