[PHP/SQL] Waarden vervangen of opslaan als ze niet bestaan

Pagina: 1
Acties:

Onderwerpen


  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 13-08 08:00
Ik ben bezig met een website en ik moet ingevulde formulieren opslaan. Nu moet het eenvoudig zijn om velden toe te voegen of te wissen, en daarom heb ik de velden zelf ook in de DB opgeslagen.

Ik heb twee tabellen:

fields
* field_id (key)
* field_name

data
* record_id (key)
* formulier_id
* field_id
* field_value

Op deze manier kan ik eenvoudig velden toevoegen door die in fields toe te voegen en de waarde in values op te slaan.

Nu, dit werkt vrij goed, maar ik zit een beetje in de war met de methode hoe ik gegevens ga opslaan, of beter, veranderen nadat ze al opgeslagen zijn.

Mijn formulier bevat veel checkboxes, dus het leek me een goed idee om enkel de velden op te slaan die niet default zijn. (default = niet checked). Enkel de velden die aangeduid zijn dus.

Het probleem is nu hoe ik dit aanpak bij een edit van het formulier.

Ik heb een soort van INSERT OR UPDATE IF EXISTS nodig. Als een waarde al in de database staat, vervangen, als het er nog niet staat, invoegen.

Hoe kan ik dit het beste implementeren?

Is eerst de hele fiche uit de DB wissen en daarna opnieuw schrijven een goed idee? Wat als mijn script dan om een of andere duistere reden daartussen stopt? Dan ben ik mijn data kwijt.

Een select van de waardes die er zijn, en daarna een update van die waardes, en daarna een insert van de andere waardes lijkt me nogal omslachtig...

Ideeën zijn welkom!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Heel simpel. je hebt toch een record_id en een field_id ? Als die leeg zijn, ben je aan het inserten :)

Stop uploading passwords to Github!


  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 13-08 08:00
Inderdaad, maar dan moet ik voor elke waarde die ik wil inserten eerst toch een select gaan doen? Dat zijn 180 extra SELECT query's! (ik heb namelijk 180 waardes per formulier, waarvan er maar een deel hoeven opgeslagen te worden).

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 11-09 21:40
Je kan ze met 1 select query ook allemaal ophalen en daarna kijken welke er nog leeg zijn ;)

Is REPLACE INTO niet iets voor je? :)

[ Site ] [ twitch ] [ jijbuis ]


  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 13-08 08:00
REPLACE INTO leek veelbelovend, maar in mijn structuur heb ik geen duplicates aangezien mijn primary key de record_id is, en die is uniek voor elke waarde, bij nieuwe waarden komt deze gewoon op +1 te staan...

eigenlijk zou ik een combinatie van twee cellen moeten hebben als primary key (mijn field_id en mijn formulier_id), maar dat is niet mogelijk afaik met mysql...

  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 13-08 08:00
hmm, heb net ontdekt dat het mogelijk is om een UNIQUE op twee keys te zetten zodat die twee samen niet kunnen voorkomen, hiermee kan ik wel REPLACE INTO gebruiken!

bedankt!

Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Mayco schreef op donderdag 14 februari 2008 @ 18:59:
eigenlijk zou ik een combinatie van twee cellen moeten hebben als primary key (mijn field_id en mijn formulier_id), maar dat is niet mogelijk afaik met mysql...
Het lijkt me wel mogelijk 2 primary keys te hebben:

SQL:
1
2
3
4
5
6
CREATE TABLE `wgroupusers` (
  `gid` int(11) NOT NULL,
  `uid` int(11) NOT NULL,
  `extra` text NOT NULL,
  PRIMARY KEY  (`gid`,`uid`)
);

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Nee, dat is 1 key over 2 kolommen. ;)

{signature}

Pagina: 1