Toon posts:

[Mysql] Maximaal 10 records

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan ik een tabel aanmaken waar maximaal 10 records in opgeslagen kunnen worden. De teller kan bijvoorbeeld 'ID' zijn. Als ID > 10 dan moet ID met '1' verwijderd worden... enz... enz....

  • styno
  • Registratie: Juni 2001
  • Laatst online: 24-08 15:14

styno

Koffie? Hmmm, ja, lekkerrr

Er is geen type tabel voor ofzo, wel een kolom type autoincrement, maar het verwijderen zul je zelf moeten doen

Climatechange is a super-wicked problem, but:
"The stone age came to an end not for lack of stones. And the oil age will come to an end not for lack of oil." -- Sheikh Yamani, Saudi oil minister
8xLG Neon MonoX 290Wp SMA SB2100TL / MY SR '22


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:50

mulder

ik spuug op het trottoir

Ik zou dan voor zoiets kiezen
Tabel:
Id
Nummer < die 1 - 10

Verder zul je denk ik met code de rest moeten regelen

oogjes open, snaveltjes dicht


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

Waarom wil je een tabel waarin max 10 records staan? Waarom niet ervoor zorgen dat je maar max 10 records opvraagt? (en dan eens in de zoveel tijd misschien even een opruim aktie).
't Kan iig niet zomaar automatisch.
Waar komen die gegevens in die tabel vandaan? Als je via een onderhoudsscherm die items inklopt, kun je na het toevoegen van een record de oudere records deleten.

Exact expert nodig?


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
je kunt in je query met LIMIT aangeven hoeveel records je terug wil hebben en met ASC en DESC of ie voor of achter aan moet beginnen (en met ORDER in welke kolom)
records deleten lijkt me een beetje onzinnig

Verwijderd

Je kan toch met mysql_num_rows het aantal rijen tellen, komt dat boven de tien dan delete je de eerst gemaakte. Is toch wel te doen zo?

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-09 18:16
SELECT * FROM blaat LIMIT 0,10

verwijderen zou je handmatig moeten doen.

  • Grum
  • Registratie: Juni 2001
  • Niet online
marty:
je kunt in je query met LIMIT aangeven hoeveel records je terug wil hebben en met ASC en DESC of ie voor of achter aan moet beginnen (en met ORDER in welke kolom)
records deleten lijkt me een beetje onzinnig


Nee.
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
[LIMIT [offset,] rows]
Zie: http://www.mysql.com/doc/en/SELECT.html

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Grum schreef op 16 augustus 2002 @ 14:00:
marty:
je kunt in je query met LIMIT aangeven hoeveel records je terug wil hebben en met ASC en DESC of ie voor of achter aan moet beginnen (en met ORDER in welke kolom)
records deleten lijkt me een beetje onzinnig


Nee.


[...]

Zie: http://www.mysql.com/doc/en/SELECT.html
dat bedoelde ik. dat haakje was alleen niet helemaal op z'n plaats

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

Als je een DB goed in elkaar draait, en desnoods de BCNF eroverheen gooit.. Dan heb je een database die een minimale aantal Kb in beslag neemt..
Als je al die moeite doet, waarom zou je dan meer data willen bewaren (dus 10+ tupels) dan strikt noodzakelijk??

De beste oplossing hier is gewoon:
PHP:
1
2
3
4
5
6
7
8
IF (mysql_numrows(mysql_query("select ID from table")) >= 10)
{
   # dan een leuke update i.p.v een delete en insert
}
ELSE
{ 
   # doe een geinig insert
}

42


Verwijderd

Topicstarter
Prutser_IA schreef op 16 augustus 2002 @ 15:01:
Als je een DB goed in elkaar draait, en desnoods de BCNF eroverheen gooit.. Dan heb je een database die een minimale aantal Kb in beslag neemt..
Als je al die moeite doet, waarom zou je dan meer data willen bewaren (dus 10+ tupels) dan strikt noodzakelijk??

De beste oplossing hier is gewoon:
PHP:
1
2
3
4
5
6
7
8
IF (mysql_numrows(mysql_query("select ID from table")) >= 10)
{
   # dan een leuke update i.p.v een delete en insert
}
ELSE
{ 
   # doe een geinig insert
}
Kijk... zoiets gaat het ook worden. Ik wil het gaan gebruiken voor een stats-script. En als ik de gegevens van ELK bezoek in de database zet, dan wordt ie 'n beetje groot. Dit wil ik niet..

Ik wil dus maximaal 100 hits ofzo bijhouden...

Maar merci, ik kom d'r nu wel uit :D

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Prutser_IA schreef op 16 augustus 2002 @ 15:01:

De beste oplossing hier is gewoon:
PHP:
1
2
3
4
5
6
7
8
IF (mysql_numrows(mysql_query("select ID from table")) >= 10)
{
   # dan een leuke update i.p.v een delete en insert
}
ELSE
{ 
   # doe een geinig insert
}
zo makkelijk gaat dat niet. als je je database inderdaad goed in elkaar draait dan zet je die id op autoincrement. Met alleen een update query red je het dan niet. Tenzij je telkens hetzelfde bericht wil overschrijven. Je zult dus toch moet inserten en daarna degene met de laagste id wissen

maargoed, ik zie nog steeds het nadeel van meer data opslaan niet. liever teveel dan te weinig zou ik zeggen. qua snelheid scheelt het nix (is zelfs sneller omdat het bij het invoegen een delete query scheelt). en als ie op een gegeven moment te groot wordt kun je altijd nog in ene een hele rits weghalen

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

marty schreef op 16 augustus 2002 @ 15:30:
[...]

zo makkelijk gaat dat niet. als je je database inderdaad goed in elkaar draait dan zet je die id op autoincrement. Met alleen een update query red je het dan niet. Tenzij je telkens hetzelfde bericht wil overschrijven. Je zult dus toch moet inserten en daarna degene met de laagste id wissen

maargoed, ik zie nog steeds het nadeel van meer data opslaan niet. liever teveel dan te weinig zou ik zeggen. qua snelheid scheelt het nix (is zelfs sneller omdat het bij het invoegen een delete query scheelt). en als ie op een gegeven moment te groot wordt kun je altijd nog in ene een hele rits weghalen
Je zou bij deze oplossing wellicht voor een andere primary key moeten gaan, zoals een timestamp.. dan is de update geen probleem..

Het nadeel van extra data opslaan is er hier wellicht niet, maar tis een principe kwestie :9 Het opslaan van overtollige informatie is gewoon een zonde van de Kb's, weet wel dat het tegenwoordig geen probleem maar als je het over de DB van KPN heb (met alle nummers) dan wil je echt geen extra KB's bij elke tupel hoor...

42


Verwijderd

Topicstarter
Ik wil na het afmaken van het systeem dus niet elke keer willen kijken 'hoe groot de db inmiddel is'... Het moet allemaal automatisch gaan.

M.b.v de numrows ga ik het hoogste ID bepalen, vervolgens deleten, daarna toevoegen.. :)

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Prutser_IA schreef op 16 augustus 2002 @ 15:43:
[...]
Je zou bij deze oplossing wellicht voor een andere primary key moeten gaan, zoals een timestamp.. dan is de update geen probleem..
handig als je de timestamp van mysql gebruikt (wat het meest voor de hand liggend en practisch is) en er wordt in dezelfde seconde twee keer iets toegevoegd. Dan zal je dus bij de laatste (in msec gezien) een fout krijgen, want je primary key moet uniek zijn.

en hoe zie jij het updaten gebeuren dan, met maar 1 query?

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

LOCK TABLE blaat WRITE
DELETE FROM blaat WHERE a=1
INSERT INTO blaat (a,b,c) VALUES (1,2,3)
INSERT INTO refblaat (a,b,c,d) VALUES ('', LAST_INSERT_ID(), 3, 4)
UNLOCK TABLES

zoiets?
Pagina: 1