Autor Zpráva
PecanCZ
Profil
Zdravím, řekněme, že mám v db 200 záznamů a já bych potřeboval vymazat 190 tak, aby těch 10 co zůstane bylo nejnovějších. Mohl by mi někdo poradit jak to nejjednodušeji provést?

Děkuji
shaggy
Profil
Ak chceš nechať najnovšie, tak logicky vieš ich dátum (prípadne id). A preto pri mazaní použiješ podmienku (WHERE) kde je dátum starší ako ten, od ktorého chceš nechať záznamy. Prípade zmažeš všetko, kde je id menšie, ako id najstaršieho záznamu, ktorý chceš nechať (za predpokladu, že id je auto increment).
PecanCZ
Profil
ID mám, ale nemusí na sebe navazovat, protože do db se ukládají data od více uživatelé a já vybírám, respektive chci mazat jen od určitého uživatele...svým způsobem tedy ID záznamu od kterého chci mazat neznám
Tori
Profil
Dá se to řešit poddotazem, kterým vyberete ID řádků, které se mají smazat. tabulka je v obou případech ta, ze které chcete mazat. Liší se jen aliasem. V druhé polovině LIMIT může být jakékoli číslo spolehlivě vyšší, než počet řádků v tabulce. Omezení na konkrétního uživatele patří taky do poddotazu.
DELETE t1
FROM tabulka t1 
INNER JOIN (SELECT id FROM tabulka ORDER BY datum DESC LIMIT 10, 123456789) ref USING (id)

Jednoduchý DELETE s ORDER BY a LIMIT se dá taky použít, ale musel byste znát přesný počet řádků tabulky, protože u DELETE se dá v části LIMIT použít jen jediné číslo (kolik řádků smazat).
PecanCZ
Profil
to je ono, díky :)
shaggy
Profil
PecanCZ:
protože do db se ukládají data od více uživatelé a já vybírám, respektive chci mazat jen od určitého uživatele
Len poznámka - do budúcnosti by bolo dobré túto informáciu napísať ;-) Potom by som nemusel hádať, čo asi chceš urobiť. Alebo si mal dôvod, prečo si nám neposkytol všetky informácie? Verím, že nie.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0