Autor | Zpráva | ||
---|---|---|---|
pe4k Profil |
#1 · Zasláno: 4. 2. 2006, 15:37:28
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 |
#2 · Zasláno: 4. 2. 2006, 16:45:12
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 |
#3 · Zasláno: 4. 2. 2006, 22:36:26
llook
díky moc, som si myslel, že to bude jednoduché len ma to nenapadlo |
||
Časová prodleva: 2 měsíce
|
|||
Anonymní Profil * |
#4 · Zasláno: 31. 3. 2006, 12:39:40
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 |
#5 · Zasláno: 31. 3. 2006, 12:48:27
$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 * |
#6 · Zasláno: 31. 3. 2006, 12:53:56
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 * |
#7 · Zasláno: 31. 3. 2006, 13:09:46
Anonymní
Myslis, ze jsem jasnovidec? Hod sem hlasku, kterou ti vypise mysql_error(). |
||
Anonymní Profil * |
#8 · Zasláno: 31. 3. 2006, 13:15:35
No že MySQL_Fetch_Assoc je nevalidní příkaz, ne?
|
||
hugo_jinde Profil * |
#9 · Zasláno: 31. 3. 2006, 13:17:18
Anonymní
Ne, chyba je v sql. Dej za mysql_query radek print mysql_error(); a hod sem hlasku, kterou ti to napise. |
||
Anonymní Profil * |
#10 · Zasláno: 31. 3. 2006, 13:33:28
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 * |
#11 · Zasláno: 31. 3. 2006, 13:35:24
Aha, u limitu samozrejme nesmi byt rovnitko. TO jsem prehlidl.
|
||
Kajman_ Profil * |
#12 · Zasláno: 31. 3. 2006, 13:41:44
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 * |
#13 · Zasláno: 31. 3. 2006, 13:42:46
o.k. díky všem, hlavně Hugovi že měl trpělivost.:)
|
||
Anonymní Profil * |
#14 · Zasláno: 31. 3. 2006, 13:45:38
Takže takhle?
$vymazat = "DELETE FROM `tabulka` ORDER BY `id` ASC LIMIT ".$data['Count']; |
||
Anonymní Profil * |
#15 · Zasláno: 31. 3. 2006, 13:49:28
Pořád chyba syntaxe...
|
||
hugo_jinde Profil * |
#16 · Zasláno: 31. 3. 2006, 13:52:32
Tak si ten dotaz vypis. Terba je v $data['Count'] neco jineho nez predpokladas.
|
||
Anonymní Profil * |
#17 · Zasláno: 31. 3. 2006, 13:54:21
Hází to toto:
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /u2/www/fball_org/data............. on line 204 |
||
Anonymní Profil * |
#18 · Zasláno: 31. 3. 2006, 13:58:31
Už to funguje, má to bý tak:
$vymazat = "DELETE FROM `kniha` ORDER BY `id` ASC LIMIT ".$data['Count'].""; |
||
Anonymní Profil * |
#19 · Zasláno: 31. 3. 2006, 14:13:03
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 |
#20 · Zasláno: 31. 3. 2006, 16:21:18
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 * |
#21 · Zasláno: 31. 3. 2006, 16:47:36
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 * |
#22 · Zasláno: 31. 3. 2006, 17:15:12
A vlastě by to mělo jít i takhle jednoduše :-)
DELETE FROM `tabulka` ORDER BY `id`DESC LIMIT 30,10000000 |
||
Anonymní Profil * |
#23 · Zasláno: 31. 3. 2006, 23:30:34
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 * |
#24 · Zasláno: 2. 4. 2006, 15:15:05
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. |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0