Keresés

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

  • Sk8erPeter

    nagyúr

    válasz Speeedfire #1167 üzenetére

    Hát én komplexebb feladatokra tárolt eljárást használok, mióta belekóstoltam.
    De a te feladatodat igazából nem értem, hogy miért akarod tömbökbe szedni a userek id-ját... Adott userekhez tartozó bejegyzéseknél X időközönként csak Y mennyiséget akarsz törölni, tehát azt akarod, hogy valamennyi az adott júzerhez mindenképp megmaradjon?
    Szóval nem csak törölni kell a táblából azt az Y sort, azt' kész?
    Fejtsd ki, MOST! :D

    ===

    (#1166) lakisoft :
    "Tárolt eljárást is sokszor használok Dynamic SQL-lel együtt. Ott már nem látod hogy csúnya :DDD."
    Miért, a tárolt eljárás önmagában még nem ocsmány, de el lehet rondítani. :D

    Sk8erPeter

  • 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