Avatar billede mrfunder Nybegynder
16. august 2010 - 21:59 Der er 2 kommentarer

Hjælp til sletning af gamle annoncer

Hej alle,

Jeg har en tabel der ser således ud:

id      category    dato (datetime)
1      2               
2      2
3      2
4      2
5      1
6      3
7      1

Jeg er ude efter at slette de ældste rækker med samme category. Der må maks være 3 rækker med samme category. Altså i dette eksempel skal rækken med id #1 slettes.

Hvordan gør jeg dette? Jeg håber der er nogen der kan hjælpe mig på vej :) på forhånd mange tak
Avatar billede heyn Nybegynder
17. august 2010 - 06:01 #1
Umiddelbart ville jeg hver gang jeg indsætter en post:

1) Sætte LOCK på db.
2) Indføre en post i en kategori. F.eks. 2.
3) Tjekke om der er mere end 3 poster i kategorien 2.
4) Hvis ja:
DELETE FROM tabelnavn WHERE categori=2 ORDER BY dato LIMIT 1;
5) UNLOCK db

Jeg kan ikke umiddelbart se hvordan det skulle gøres i et statement.
Avatar billede jesperhgh Nybegynder
17. august 2010 - 16:50 #2
mysql> select * from test;
+----+----------+
| id | category |
+----+----------+
| 17 |        1 |
| 18 |        1 |
| 19 |        1 |
| 20 |        2 |
| 21 |        2 |
| 22 |        2 |
| 23 |        2 |
| 24 |        3 |
| 25 |        3 |
| 26 |        4 |
| 27 |        4 |
| 28 |        4 |
| 29 |        4 |
| 30 |        4 |
+----+----------+
14 rows in set (0.00 sec)

Følgende query sletter den laveste id hvor en category findes mere end 3 gange:
Første gang slettes 20 og 26.
Næste gang slettes 21 og 27 osv, indtil ingen category findes mere end 3 gange.

NB: den inderste (select * from test) er en workaround for en bug i Mysql (fejl 1093).

mysql> delete from test where id in (select min(id) from (select * from test) as x group by category having (count(category)>3));

Hvis du bruger PHP:

$sql="delete from test where id in (select min(id) from (select * from test) as x group by category having (count(category)>3))";
do {
    mysql_query($sql);
} while(mysql_affected_rows());
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

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