Avatar billede supermand69 Nybegynder
16. september 2005 - 21:15 Der er 8 kommentarer og
1 løsning

reducere query

kan det lade sig gøre at reducere følgende query?

$row = mysql_fetch_array(mysql_query("SELECT COUNT(time) FROM $DB.broadcast"));
$exceed_num = $row[0] - 10;
if($exceed_num) mysql_query("DELETE FROM $DB.broadcast ORDER BY time LIMIT $exceed_num");
Avatar billede Slettet bruger
17. september 2005 - 00:04 #1
Jeg har ikke testet, men du kunne prøve med:

mysql_query("DELETE FROM $DB.broadcast ORDER BY time LIMIT (SELECT COUNT(time)-10 FROM $DB.broadcast)");
Avatar billede Slettet bruger
17. september 2005 - 00:05 #2
Prøv for en sikkerheds skyld på en kopi først, så du ikke får slettet noget, du helst ville have beholdt.
Avatar billede supermand69 Nybegynder
17. september 2005 - 08:45 #3
synes ikke det virker...
Avatar billede Slettet bruger
17. september 2005 - 10:05 #4
Du er nødt til at være mere specifik, hvis jeg skal kunne hjælpe.

Kommer der en fejlmeddelelse hvis du retter til:
mysql_query("DELETE FROM $DB.broadcast ORDER BY time LIMIT (SELECT COUNT(time)-10 FROM $DB.broadcast)") or die(mysql_error());

Er der rækkker, som skulle have været slettet, men ikke blev det? Hvor mange?
Avatar billede supermand69 Nybegynder
17. september 2005 - 10:07 #5
der står at der er fejl her

(SELECT COUNT(time)-10 FROM $DB.broadcast

der blev slet ikke slettet nogle rækker
Avatar billede Slettet bruger
17. september 2005 - 10:39 #6
Hvilken fejl?

Har du en unik nøgle i tabellen? Så kan du prøve med:

mysql_query("DELETE FROM $DB.broadcast WHERE nøglefelt NOT IN (SELECT nøglefelt FROM $DB.broadcast ORDER BY time LIMIT 10)") or die(mysql_error());

En helt anden mulighed er at vende tabellen på hovedet:


Ellers skal du måske bruge:
mysql_query("DELETE FROM $DB.broadcast ORDER BY time DESC LIMIT 10,100000") or die(mysql_error());

Den sidste udgave sletter ikke de 10 nyeste, men dem fra nummer 11 til 100000
Avatar billede supermand69 Nybegynder
17. september 2005 - 10:49 #7
mysql_query("DELETE FROM $DB.broadcast WHERE time NOT IN (SELECT time FROM $DB.broadcast ORDER BY time LIMIT 10)")or die(mysql_error());

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

jeg bruger MySQL 4.1.12
Avatar billede supermand69 Nybegynder
18. september 2005 - 16:40 #8
underligt.. jeg får denne fejl

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 '100000' at line 1

mysql_query("DELETE FROM $DB.broadcast ORDER BY time DESC LIMIT 10,100000") or die(mysql_error());
Avatar billede Slettet bruger
18. september 2005 - 21:54 #9
Nej, det ser desværre ud til at ved en DELETE understøtter LIMIT kun antal rækker og ikke et startpunkt.

Og der kan ikke bruges LIMIT i en subquery.

Så alt i alt er du nødt til at bruge 2 queries til at slette rækkerne. Desværre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester