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
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.
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());
Synes godt om
Ny brugerNybegynder
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.