Ik wil van een script alleen de laatste 500 rijen in de database behouden.
Rij 501 moet dus automatisch verwijderd worden uit de database, dit krijg ik niet voor elkaar.

Heeft iemand enig idee?
LIMIT gebruiken.
Mag je een limit ook bij een INSERT gebruiken?
bij elke insert het aangemaakte id opvragen en id's lager dan dat id min 500 deleten. Zie de php functie mysql_insert_id()
hoe krijg ik dit in bijvoorbeeld mijn insert?
(tabelnaam is even als test)


$query = "
INSERT INTO tabel
(kolom1, kolom2, kolom2)
VALUES
('$kolom1', '$kolom2', '$kolom3')";
Dat is al een INSERT...
Ik zou het dan wel zo doen:


<?php
$query = "
INSERT INTO tabel
(kolom1, kolom2, kolom2)
VALUES
('".$kolom1."', '".$kolom2."', '".$kolom3."')";
?>
Ten eerste niet de check op welke weg moeten op id doen, want als er eens eentje tussenuit gehaald wordt klopt het al niet meer. Daarnaast zal je auto_increment weer bij 1 beginnen op het moment dat je aan de limiet van je data type zit en zit je dus ook alweer met een probleem. Veel beter is om een veld 'create_date' of iets dergelijks bij te houden. Dat zet je op een TIMESTAMP type en aan de hand daarvan kan je bepalen welke rijen behouden moeten worden:

SELECT id, create_date
FROM tabel
ORDER BY create_date DESC
LIMIT 499, 1

DELETE FROM tabel
WHERE id < :id AND create_date <= :create_date

Je zoekt dus eerst het vijfhonderdste record en dan haal je alle records weg die een lager id hebben en een oudere create_date. Merk wel op dat ik hier <= heb gebruikt bij create_date, aangezien je ook nog records kunt hebben met dezelfde timestamp.
Ja dat klopt, maar mijn bedoeling was dat er maximaal 500 rijen in de database mogen komen.

Wat is trouwens het verschil tussen:
('$kolom1', '$kolom2', '$kolom3')";
en
('".$kolom1."', '".$kolom2."', '".$kolom3."')";
Op deze manier escape je de php variabelen.
('".$kolom1."', '".$kolom2."', '".$kolom3."')";

Wil er max 500 records in hebben, dan is het voor een insert eerst een select te doen, en vervolgens met mysql_num_rows() kijken hoeveel records het zijn. Zijn het er 500 dan voor je er geen meer op.
Je kan ook met COUNT() in MySQL het aantal records tellen.
hoe ik kan ze dan met count verwijderen? (500+ rijen)

Reageren