Toon posts:

[MySQL] INSERT en DELETE tegelijk

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig een soort van discussie bord te maken, waarbij ik wil dat telkens als er een item wordt toegevoegd, hij kijkt of er (om te kijken of het werkt) meer dan 10 in de database staan, om vervolgens alle oudste berichten te verwijderen tot er nog maar 10 over zijn.

Ik heb dit nu als Query:
PHP:
1
2
3
4
5
6
7
8
$query = "DELETE FROM discussie WHERE id NOT IN (SELECT id FROM discussie ORDER BY id DESC LIMIT 10)";
$query = "INSERT INTO discussie (Datum, Naam, Titel, Commentaar)";
$query .= "VALUES ('";
$query .=date("Y-m-d-h-i")."','";
$query .=$name."','";
$query .=$_GET["Titel"]."','";
$query .=$_GET["Commentaar"]."');";
$result = mysql_query($query) or die ("FOUT: " . mysql_error());


En ik krijg een foutmelding dat er iets niet goed staat in het SELECT if FROM... gedeelte, en dat klopt ook wel, omdat MySQL geen subquery's ondersteunt. Versie 4.1 wel, maar die is nog beta, dus dat schiet ook niet op...

Iemand een idee hoe dit op te lossen is? Bedankt! O-)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je hebt 2 statements, die moet je gewoon los uitvoeren.
Bovendien klopt je insert query niet, values staat tegen het haakje sluiten aan.

[ Voor 7% gewijzigd door justmental op 13-02-2004 19:54 ]

Who is John Galt?


Verwijderd

Topicstarter
justmental schreef op 13 februari 2004 @ 19:53:
Je hebt 2 statements, die moet je gewoon los uitvoeren.
Bovendien klopt je insert query niet, values staat tegen het haakje sluiten aan.
Mijn INSERT werkt prima...
En die twee statements moet ik inderdaad apart uitvoeren, maar ik weet niet hoe ik de laagste id's kan selecteren uit een database met eemr dan 10 records...

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
justmental schreef op 13 februari 2004 @ 19:53:
Je hebt 2 statements, die moet je gewoon los uitvoeren.
Bovendien klopt je insert query niet, values staat tegen het haakje sluiten aan.
Nee hoor, dat hoeft niet.
Verwijderd schreef op 13 februari 2004 @ 19:55:
[...]

En die twee statements moet ik inderdaad apart uitvoeren, maar ik weet niet hoe ik de laagste id's kan selecteren uit een database met eemr dan 10 records...
Het laagste ID of de laagste hoeveel id's ?
code:
1
SELECT MIN(id) FROM tabel

of
code:
1
2
3
SELECT id
FROM tabel
ORDER BY id ASC LIMIT 20


Die LIMIT beperkt je recordset tot een bepaald aantal.
Ik begrijp niet waarom je dat niet kunt doen, als het je wel lukt om de laagste 10 te selecteren?

[ Voor 56% gewijzigd door whoami op 13-02-2004 20:00 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik bedoel het volgende
Je hebt een tabel met de volgende waarden:
code:
1
2
3
4
5
id  Value
1.  Jan
2.  Truus
3.  Klaas
4.  Hendrik


en zodra er een record toegevoegd wordt, moet de oudste verwijderen, dus dat je dit krijgt:
code:
1
2
3
4
5
id  Value
2.  Truus
3.  Klaas
4.  Hendrik
5.  Bob


Dus er mogen max 4 records bekend zijn, en als er meer bijkomen, moet het oudste record gedelete worden.

Het laagste ID nummer moet dus geselecteerd worden, en eruit gegooid.

[ Voor 9% gewijzigd door Verwijderd op 13-02-2004 20:05 ]


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Je kunt ze een volgnr meegeven (1-10) en eerst een update uitvoeren die volnr=volgnr+1 doet. De nieuwe row voer je in met volgnr 1. Vervolgens delete je alles met volgnr hoger dan 10.

Moet je wel zorgen dat je de tabel ff lockt ofzo, want als iemand anders hier tussendoor gaat zitten wordt het een zooitje :)

Andere mogelijkheid (moet goed werken met MySQL) en is wat meer foolproof:

Insert je record en vraag met mysql_insert_id() in PHP de nieuwe ID op. Delete vervolgens alles met ID <= newID-10

scheelt een query en je locking is hier als het goed is ook niet nodig.

[ Voor 31% gewijzigd door Bosmonster op 14-02-2004 12:26 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Kan je het niet anders oplossen? Dat je die oude records niet verwijderd, maar dat men altijd slechts de recentste 4 kan zien (mbhv een VIEW oid).

https://fgheysels.github.io/

Pagina: 1