[SQL] Opvolgende prioriteit bij INSERT

Pagina: 1
Acties:

  • Jo3p789
  • Registratie: April 2006
  • Laatst online: 19-08-2024
Het volgende probleem ben ik vaker tegengekomen, maar ik wil toch graag een elegantere oplossing toepassen dan ik tot nu toe heb gedaan.

Stel je een tabel, User, voor met drie velden: id [primary key], name [string] en priority [int]. Nu wil ik ieder nieuwe record dat wordt aangemaakt automatisch voorzien van het hoogste getal voor priority. Tot nu toe deed ik dit door eerst het hoogste getal op te roepen:

SELECT Max(priority.priority)+1 AS MaxOfpriority FROM priority;

En daarna dat getal in een insert te verwerken. Maar dit moet toch in een keer kunnen?

Ik heb geprobeerd iets te doen met

INSERT INTO User (id, name, priority) VALUES ("md5-something", "bob de bouwer",
(
SELECT Max(priority As priority_2)+1 AS MaxOfpriority FROM User As User_2;
)
)


Maar dat werkt natuurlijk weer niet... Ook op Google en in mijn database-boeken heb ik geen oplossing kunnen vinden. Ook het toewijzen van een auto veld aan priority is niet handig, omdat ik die prioriteiten wel wil kunnen swappen.

Heeft iemand hier een charmante oplossing voor? Het scheelt namelijk een hoop geprogrammeer elke keer.

Groet,

Jo3p

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je zou (afhankelijk van welke SQL je gebruikt) bijvoorbeeld een UDF (User Defined Function) kunnen gebruiken. Die kun je inline aanroepen.

[ Voor 11% gewijzigd door RobIII op 20-09-2006 01:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Jo3p789
  • Registratie: April 2006
  • Laatst online: 19-08-2024
Prima idee! Dank.

Probleem is daarbij wel dat het gaat om een (internet) Access database die ik niet zomaar even kan aanpassen, omdat deze veelvuldig gebruikt wordt, en ik de site niet even snel offline kan halen.

Ik ga er mee aan de slag, maar een directe oplossing zou me erg blij maken :)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Probeer het anders eens op de INSERT INTO .. (..) SELECT ... manier. Dus ipv Values(..) een SELECT clause.

  • bazkar
  • Registratie: Juni 2001
  • Laatst online: 05-02 12:59
idd, een insert into met een select is de oplossing:

SQL:
1
INSERT INTO User (Id, Naam, Priority) SELECT "md5hash","1337 h4X0r",MAX(Priority)+1 FROM USER