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
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