Autor Zpráva
pe4k
Profil
mám neurčitý počet záznamov a po kliknutí chcem zmazať všetky okrem posledných tridsiatich záznamov

prim. key je na auto_increment num stĺpci
llook
Profil
Asi jedině dvěmi SQL dotazy:

SELECT COUNT(*) - 30 FROM `tabulka`;
DELETE FROM `tabulka` ORDER BY `num` ASC LIMIT výsledek toho prvního dotazu

Teda aspoň v MySQL jinou možnost nevidím. V chytřejších databázích to možná půjde i nějak jinak.
pe4k
Profil
llook

díky moc, som si myslel, že to bude jednoduché len ma to nenapadlo
Anonymní
Profil *
prosím upřesnit, jak to bude konkrétně?

$dotaz = "SELECT COUNT(*) - 30 FROM `tabulka`";
$vymazat = "DELETE FROM `tabulka` ORDER BY `id` ASC LIMIT =$dotaz ";
mysql_query($vymazat);

Takto???
Hugo
Profil
$dotaz = "SELECT COUNT(*) - 30 AS Count FROM `tabulka`";
$res = mysql_query($dotaz);
$data=MySQL_Fetch_Assoc($res);

$vymazat = "DELETE FROM `tabulka` ORDER BY `id` ASC LIMIT =".$data['Count'];
mysql_query($vymazat);
Anonymní
Profil *
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /u2/www/fball_org/data/www/member/forum.php on line 203


Hugo???
hugo_jinde
Profil *
Anonymní

Myslis, ze jsem jasnovidec? Hod sem hlasku, kterou ti vypise mysql_error().
Anonymní
Profil *
No že MySQL_Fetch_Assoc je nevalidní příkaz, ne?
hugo_jinde
Profil *
Anonymní

Ne, chyba je v sql. Dej za mysql_query radek
print mysql_error();

a hod sem hlasku, kterou ti to napise.
Anonymní
Profil *
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /u2/www/fball_org/data/dadunka/member/forum.php on line 203
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=' at line 1
hugo_jinde
Profil *
Aha, u limitu samozrejme nesmi byt rovnitko. TO jsem prehlidl.
Kajman_
Profil *
Bude taky třeba ošetřit případ, kdy bude součet menší nebo rovno 30. Pak se delete dělat nebude (v limitu stejně nesmí být záporná hodnota).

Asi jedině dvěmi SQL dotazy

Asi to půjde jedním přes using, ale to by bylo výpočetně náročnější. Přes dva to je asi lepší.
Anonymní
Profil *
o.k. díky všem, hlavně Hugovi že měl trpělivost.:)
Anonymní
Profil *
Takže takhle?

$vymazat = "DELETE FROM `tabulka` ORDER BY `id` ASC LIMIT ".$data['Count'];
Anonymní
Profil *
Pořád chyba syntaxe...
hugo_jinde
Profil *
Tak si ten dotaz vypis. Terba je v $data['Count'] neco jineho nez predpokladas.
Anonymní
Profil *
Hází to toto:
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /u2/www/fball_org/data............. on line 204
Anonymní
Profil *
Už to funguje, má to bý tak:
$vymazat = "DELETE FROM `kniha` ORDER BY `id` ASC LIMIT ".$data['Count']."";
Anonymní
Profil *
Ještě k tomu o čem hovořil Kajman, ošetřil jsem to tak:

if (mysql_num_rows($prispevku)>50):
$dotaz = "SELECT COUNT(*) - 50 AS Count FROM $table_name";
$res = mysql_query($dotaz);
$data = MySQL_Fetch_Assoc($res);
$vymazat = "DELETE FROM `kniha` ORDER BY `id` ASC LIMIT ".$data['Count']."";
mysql_query($vymazat);
endif;

Mělo by to stačit, nebo ne? :-)
mila
Profil
Neřekl bych, že je to moc dobré.
- Představ si, co se může stát, pokud přistoupí dva takovéto skripty najednou - oba si zjistí count-50. A pak oba začnou mazat tento počet řádek. Dost možná všechno. V lepším příápadě to jen hodí chybu, protože použije záporný limit.
- LIMIT je specialita jen některých databází.
- Spoléhá, že novější články mají větší id

Nebál bych se, že si datábáze neporádí s pár sty (tisíci) záznamů. Tyto dotazy pro mazání budou tvé skripty zdržovat více, než to že by dotaz byl na něco větší tabulku.
Kajman_
Profil *
Já bych si asi raději zjistil 30. nejvyšší id a pak smazal všechny menší - nemůže se tak stát, že pri dvou současných mazání se smaže víc, než by se mělo.

Spoléhá, že novější články mají větší id

odpovídá zadání (auto_increment)
Kajman_
Profil *
A vlastě by to mělo jít i takhle jednoduše :-)
DELETE FROM `tabulka` ORDER BY `id`DESC LIMIT 30,10000000
Anonymní
Profil *
A vlastě by to mělo jít i takhle jednoduše :-)
DELETE FROM `tabulka` ORDER BY `id`DESC LIMIT 30,10000000



Tohle to mi přece vymaže 31 - 10000000 příspěvek. My chceme vymazat prvních třicet (posledních).:)
Kajman_
Profil *
Tohle to mi přece vymaže 31 - 10000000 příspěvek. My chceme vymazat prvních třicet (posledních).:)

Podle zadání chce právě těch 30 nechat.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0