Toon posts:

[MySQL] Meerdere velden met verschillende waardes updaten

Pagina: 1
Acties:
  • 379 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Goedendag,

Mijn probleem:

Ik wil in een mysql tabel meerdere rijen updaten, maar met verschillende waardes. Ik heb bijvoorbeeld het veld 'brochures', en 4 rijen. Elke rij moet dan een, nieuwe, andere waarde krijgen, bijvoorbeeld 100, 75, 143 en 180.

Ik heb werkelijk geen idee hoe ik dit in 1 query kan doen. Met 4 rijen is het misschien nog de moeite waard om het apart te doen, maar het moet zodadelijk met ongeveer 30-40 rijen tegelijk gedaan worden. Dat zou dus betekenen dat ik 30-40 queries uit moet voeren...

Weet iemand of, en hoe dan, ik dit in 1 query kan verwerken?

Bedankt alvast,
Roemer

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Hoe weet je welke rij met welke waarde geupdate moet worden? Staat dat bijv. ergens in een gerelateerde tabel?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Vanaf MySQL versie 4.04 kun je meerdere tabellen updaten. Mischien dat dit dan werkt:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
UPDATE
  tabel t1,
  tabel t2,
  tabel t3
SET
  t1.veld = 'waarde1',
  t2.veld = 'waarde2',
  t3.veld = 'waarde3'
WHERE
  t1.id = 1
AND
  t2.id = 2
AND
  t3.id = 3

Geen idee of het ook echt mogelijk is zo, maar het is een gokje waard.

[ Voor 7% gewijzigd door Michali op 16-08-2005 13:09 ]

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
Het laatste gaat iig niet werken, omdat alle velden in 1 tabel staan.

Het script krijgt een array binnen, waarvan de key het id is van de rij die ge-update moet worden, en de value is de waarde die een ander veld in die rij moet krijgen. Het script moet dus per id een ander veld in die rij updaten.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt twee manieren op werken, in een loopje de verschillende update statements samenstellen

pseudocode

loop door array
sql = "update tabel set veld = " + array[waarde] + " where key = " + array[key]
voer_sql_uit
next

of je kunt de hele array in een tabel gooien en dan joinen met deze tabel in 1 update:

UPDATE tabel
SET veld = anderetabel.waarde
FROM tabel
INNER JOIN anderetabel on veld.key = anderetabel.key

Ligt een beetje aan de grootte van de dataset wat beter zal gaan denk ik.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Verwijderd schreef op dinsdag 16 augustus 2005 @ 13:13:
Het laatste gaat iig niet werken, omdat alle velden in 1 tabel staan.

Het script krijgt een array binnen, waarvan de key het id is van de rij die ge-update moet worden, en de value is de waarde die een ander veld in die rij moet krijgen. Het script moet dus per id een ander veld in die rij updaten.
Uh, dat is toch exact wat mijn voorbeeldje doet?

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
@Michali: oeps... sorry, te snel gelezen. Ik zal het even uitproberen

@P_de_B: Het zou allebij idd moeten werken, maar ik vind het redelijk omslachtig. Als het voorbeeld van Michali niet werkt, zal ik jouw 2e proberen.

Tnx allebij, en jullie horen nog van mij

  • MaTriCX
  • Registratie: Augustus 2002
  • Laatst online: 18-07-2024
Ik denk inderdaad dat Michali de goede oplossing heeft. Daarnaast kun je bij het 'wandelen' door een array beter niet direct de query uitvoeren, maar deze in een $string zetten.
Op die manier kun je nog eventuele 'waarden' controleren op exploits (hoewel magicqoutes() dat al aardig doet).

Dus $query = "UPDATE ... ";

Verwijderd

Topicstarter
Jup, de manier van Michali doet wat 'ie moet doen :)
tnx
Pagina: 1