Autor Zpráva
Senky
Profil
Zdravím.
Snažím sa vytvoriť skript, ktorý mi vymaže všetky údaje v jednej tabuľke, avšak rád by som ponechal jednu - tú najnovšiu. Taktiež je tu problém, že tú najnovšiu pre každého užívateľa zvlášť. Čiže riadkov by tam ostalo dokopy dosť.
Ide mi o to, že ak užívateľ pridá nejaký údaj do databázy, starý sa ponechá, pretože má možnosť si prezerať aj staré údaje. Nemám však dosť miesta na to, aby im to ukladal do nekonečna, a tak mi napadlo, že by som sem-tam mohol údaje zmazať, no bolo by podľa mňa vhodné, aby som nechal aspoň ten posledný údaj. A samozrejme, posledný pre každého.
Vedel by niekto, ako takýto problém riešiť?
Ďakujem...
Kajman_
Profil *
Možná takto, ale ruku do ohně za to nedám. Raději si to vyzkoušejte na testovacích datech
delete from t1
using tabulka t1 join tabulka t2 on t1.id_user=t2.id_user and t1.datumneboid<t2.datumneboid
-- where t1.datum<date_sub(now(),interval 6 month)
Senky
Profil
:-o len tak na to čumím, a netuším o čom je reč :). Ak ide o tabuľku t2, ktorá to má byť tabuľka? Alebo to je iba nejaká imaginárna, vďaka ktorej to pohne s tabuľkou t1?
Kajman_
Profil *
t1 a t2 jsou aliasy, Vaši tabulku si dejte všude tam, kde je slovo tabulka.

Odpovídající select (řádky, které se budou mazat):
select distinct t1.*
from `tabulka` t1 join `tabulka` t2 on t1.id_user=t2.id_user and t1.datumneboid<t2.datumneboid
Senky
Profil
Našiel som niečo také, možno by to mohlo fungovať po malej úprave:
for(i=0; i < mysql_num_row() - 1; i++){
do statements.....
}
Skúsim s tým niečo vymyslieť...
Senky
Profil
t1 a t2 jsou aliasy, Vaši tabulku si dejte všude tam, kde je slovo tabulka.
Odpovídající select (řádky, které se budou mazat):
1
2
select distinct t1.*
from `tabulka` t1 join `tabulka` t2 on t1.id_user=t2.id_user and t1.datumneboid<t2.datumneboid

Skúsil som to, ale vypisuje mi Unknown column 't1.datumneboid' in 'on clause' keď to vyzerá takto:
select distinct t1.*
from `notes` t1 join `notes` t2 on t1.user=t2.user and t1.datumneboid<t2.datumneboid
namiesto id_user totiž ukladám rovno nick, čiže user...
V takomto zložitom sql sa už nevyznám, kde môže byť chyba?
Kajman_
Profil *
datumneboid je nějaký sloupeček, podle kterého se dá poznat, který z mnoha záznamů jednoho uživatele je nejnovější.

Prostě hledáte takové řádky, ke kterým lze najíst větší id nebo datum (nebo co máte v tabulce) při stejném uživateli.
Senky
Profil
Tak mám tam napríklad aj time, čiže urobil som to takto:
select distinct t1.*
from `notes` t1 join `notes` t2 on t1.user=t2.user and t1.time<t2.time

Avšak vypisuje to Resource id #3... :(
Kajman_
Profil *
Zkuste si ten dotaz v nějakém správci databáze, když nemumíte vypsat v php řádky.
Senky
Profil
No jasné. Prečo keď mi niečo nevyjde na prvý krát tak spanikárim a nedokážem nič urobiť...
Každopádne už som všetko upravil a funguje to excelentne.
Vrelá vďaka, Kajman_
Toto téma je uzamčeno. Odpověď nelze zaslat.