Delete functie in PHP

Status
Niet open voor verdere reacties.

KingShift

Gebruiker
Lid geworden
18 sep 2006
Berichten
185
Ik heb een database met nu 150 ingaven er in.
ik wil bij elke post dat de post 1 weg gaan.
bijv als ik de 51 post dat dan de eerste post weer weg gaat.
dit wil ik doen met de delete functie. maar hoe kan ik dit doen?

bedankt alvast voor lezen en voor de oplossing als die komt;)
 
Je zou ook een LIMIT in kunnen stellen bij je query, dan hoef je ze ook niet te verwijderen.
PHP:
$query = "SELECT * FROM tabel LIMIT 50";

Wil je ze per se verwijderen dan zou je met een IF statement moeten werken
PHP:
$query = "SELECT * FROM tabel"; // Alles opvragen
$result = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($result) == 50) // Zijn er 50 entries?
{
  $deleteQuery = "DELETE * FROM tabel LIMIT 1 ASC"; 
  //Even kijken wanneer je de laatste krijgt, bij ASC of DESC. Ik weet het nooit
  $deleteResult = mysql_query($deleteQuery) or die(mysql_error());
  //Als het goed is zijn er nu 49 entries
}
//Nu ga je de nieuwe entry invoeren.
$insertQuery = "INSERT INTO tabel, enz enz enz";
 
Je zou ook een LIMIT in kunnen stellen bij je query, dan hoef je ze ook niet te verwijderen.
PHP:
$query = "SELECT * FROM tabel LIMIT 50";

Wil je ze per se verwijderen dan zou je met een IF statement moeten werken
PHP:
$query = "SELECT * FROM tabel"; // Alles opvragen
$result = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($result) == 50) // Zijn er 50 entries?
{
  $deleteQuery = "DELETE * FROM tabel LIMIT 1 ASC"; 
  //Even kijken wanneer je de laatste krijgt, bij ASC of DESC. Ik weet het nooit
  $deleteResult = mysql_query($deleteQuery) or die(mysql_error());
  //Als het goed is zijn er nu 49 entries
}
//Nu ga je de nieuwe entry invoeren.
$insertQuery = "INSERT INTO tabel, enz enz enz";

Thnx voor je antw. maar het werkt nog niet helemaal hoe ik het wil als ik nu 1 handmatig een rekert toe voeg daarna werkt de code niet meer omdat er meer dan 5 in zit
 
Tja dan moet je er handmatig even 50 van maken, het heeft niet veel zin om je code aan te gaan passen voor iets dat je maar 1x hoeft te doen.

Als je nu zorgt voor het juiste aantal dan werkt de code daarna als het goed is wel.
 
Of natuurlijk controleren op aantallen groter dan 50.... zit je altijd goed.
 
Klopt maar ik weet niet of de huidige code die ik gaf dan nog volledig gaat werken.

Wanneer je dus gaat controleren of het aantal groter is dan 50 wordt de if-statement zo
PHP:
if(mysql_num_rows($result) >= 50)

Maar ik denk dat er dan nog iets van een WHILE-lus in moet komen.

edit: Hmm misschien dat het zo kan
PHP:
while(mysql_num_rows($result) >= 50) // Zijn er 50 of meer entries? 
{ 
  $deleteQuery = "DELETE * FROM tabel LIMIT 1 ASC";  
  //Even kijken wanneer je de laatste krijgt, bij ASC of DESC. Ik weet het nooit 
  $deleteResult = mysql_query($deleteQuery) or die(mysql_error()); 
  //Als het goed houdt je uiteindelijk 49 entries over
}
 
Laatst bewerkt:
Is wat lastiger dan inderdaad. Stel dat je 53 als resultaat terugkrijgt dan wil je de laatste 3 verwijderen. Dan zou je query:

$deleteQuery = "DELETE * FROM tabel LIMIT 3 ASC

Moeten worden. Maar hoe krijg je die 3 daar?

Numrows result - 50 = 3. Of ik denk weer te simpel. :)
 
Zou het met die WHILE ook niet goed gaan dan? Die voert namelijk de query elke keer uit totdat num_rows lager is dan 50...

Maar jou oplossing kan ook, dan hoef je maar 1x de query uit te voeren..
PHP:
$count = mysql_num_rows($result);
if($count >= 50) // Zijn er 50 of meer entries? 
{ 
  $limit = $count - 50;
  $deleteQuery = "DELETE * FROM tabel LIMIT $limit ASC";  
  //Even kijken wanneer je de laatste krijgt, bij ASC of DESC. Ik weet het nooit 
  $deleteResult = mysql_query($deleteQuery) or die(mysql_error()); 
  //Als het goed houdt je uiteindelijk 49 entries over
}

Zo bedoel je?
 
Je zou zeggen dat het zo zou moeten werken, maar ik krijg hier een error.

For the single-table syntax, the DELETE statement deletes rows from tbl_name and returns the number of rows deleted. The WHERE clause, if given, specifies the conditions that identify which rows to delete. With no WHERE clause, all rows are deleted. If the ORDER BY clause is specified, the rows are deleted in the order that is specified. The LIMIT clause places a limit on the number of rows that can be deleted.

Is dus wel mogelijk... ga het nog wel uitzoeken.
 
mogelijkheid werkt perfect alleen niet zo als ik het wou:P

$maximale_results = 49;

$query = "SELECT ts_create FROM weerflits";

$aantalrecords = mysql_num_rows(mysql_query($query));

$limiet = $aantalrecords-$maximale_results;

$deletequery = "DELETE FROM weerflits ORDER BY ts_create ASC LIMIT ".$limiet."";

echo $deletequery;

mysql_query($deletequery) or die("<br><br>Fout bij uitvoeren DELETE query<br><br>".mysql_error());
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan