MySQL - radera gamla rader efter x antal nya

Permalänk
Medlem

MySQL - radera gamla rader efter x antal nya

Som frågan lyder, jag vill på något sätt få ett PHP-skript att automatiskt ta bort den äldsta raden när det finns fler än x rader (t.ex. 10). Varför? Jo, för jag har implementerat ett WYSIWYG-verktyg i en hemsida och när informationen sparas från detta (TinyMCE) sparas det såklart en ny rad för varje redigering och det kan bli många rader efter ett tag.

Testade denna koden:

$result = mysql_query("SELECT * FROM text_index2"); while($row = mysql_fetch_array($result)){ mysql_query("DELETE FROM text_index2 ORDER BY id LIMIT 1"); }

inuti denna if-satsen:

if(isset($_POST['Editor_index2'])){ // START if (!$connect){ die('Could not connect: ' . mysql_error() . ' - Kontakta mig för hjälp med detta felet.'); } mysql_select_db("$database", $connect); mysql_query("CREATE TABLE IF NOT EXISTS `$database`.`text_index2`( `id` INT UNSIGNED AUTO_INCREMENT, `text_index2` TEXT NOT NULL, PRIMARY KEY ( `id` ) )"); $sql = "INSERT INTO text_index2 (text_index2) VALUES ('$_POST[Editor_index2]')"; if (!mysql_query($sql,$connect)){ die('Error: ' . mysql_error() . ' - Kontakta mig för hjälp med detta felet.'); } $result = mysql_query("SELECT * FROM text_index2"); while($row = mysql_fetch_array($result)){ mysql_query("DELETE FROM text_index2 ORDER BY id LIMIT 1"); } echo '<p>Dina ändringar på START-sidan sparades.</p><p><a href="edit_index2.php">Fortsätt redigera samma sida.</a></p> <p><a href="editpage.php">Välj annan sida att redigera.</a></p><p><br /></p><p><a href="delete_from_database.php?delete=index2" onclick="return confirm(\'Vill du verkligen ta bort dina ändringar? Denna process går ej att ångra.\');">Ångra dina ändringar.</a></p>'; mysql_close($connect); }

Fick ett problem med detta och det var om jag skrev in något i en TOM tabell så togs det ju bort direkt *facepalm*

Så jag testade nåt sånt här:

$result = mysql_query("SELECT * FROM text_index2"); if($result['id'] > 5){ mysql_query("DELETE FROM text_index2 ORDER BY id LIMIT 1"); }

Funkade såklart inte, men något sånt liknande vill jag ha.

Kom ihåg att jag är novis på detta med PHP och MySQL så var inte för hård mot mig om det är lätt att lösa

Permalänk
Medlem

Nått sånt här borde fungera. Jag har inte testat koden men det borde iaf ge en uppfattning om hur du kan göra.

$rows = 0; $countResult = mysql_query("SELECT count(*) AS numOfRows FROM text_index2"); if($countResult == false) echo mysql_error(); $countRow = mysql_fetch_array($countResult); if($countRow != false) { $rows = $countRow['numOfRows']; } if($rows > 5) { $rowsToDelete = $rows - 5; mysql_query("DELETE FROM text_index2 ORDER BY id ASC LIMIT $rowsToDelete"); }

Permalänk
Medlem
Skrivet av Tjofras:

Nått sånt här borde fungera. Jag har inte testat koden men det borde iaf ge en uppfattning om hur du kan göra.

$rows = 0; $countResult = mysql_query("SELECT count(*) AS numOfRows FROM text_index2"); if($countResult == false) echo mysql_error(); $countRow = mysql_fetch_array($countResult); if($countRow != false) { $rows = $countRow['numOfRows']; } if($rows > 5) { $rowsToDelete = $rows - 5; mysql_query("DELETE FROM text_index2 ORDER BY id ASC LIMIT $rowsToDelete"); }

Tack så mycket, ska testa den så fort jag har chans och meddela dig om det funkar som jag vill

EDIT: Kan meddela dig om att koden funkar exakt som jag hade tänkt mig, tack så mycket för hjälpen