Hirdetés

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

  • Speeedfire
    félisten

    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

    Hát ez jól hangzik, ennek utána nézek, remélem menni fog nálam is. Én meg itt 50 soros php sql kódon agyaltam már. :B
    MySql alatt vannak az adatok, de meglesem, hogy ezek ott is vannak-e.
    Köszi. :R

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