Toon posts:

[MySQL] Multiple updating ...

Pagina: 1
Acties:

Verwijderd

Topicstarter
op 1 query in twee tabellen laten toevoegen
las ik dit:
code:
1
2
3
4
INSERT INTO errorlevels VALUES (1, 1, 'De ingevoerde gebruikersnaam of wachtwoord is ongeldig'),
(2, 2, 'U bent vergeten uw gebruikersnaam in te voeren'),
(3, 3, 'U bent vergeten uw wachtwoord in te voeren'),
(4, 4, 'Je bent vergeten het kenteken in te voeren');


nu vraag ik me af hoe hetzelfde te doen met de update functie:

ik probeer nu dit (zo zie je wat ik bedoel):
code:
1
2
3
4
5
6
UPDATE riptags SET freq=freq+1 WHERE( cid='terms-index' AND tag ='br' AND mtag ='moth'),
( cid='terms-index' AND tag ='p' AND mtag ='moth'),
( cid='terms-index' AND tag ='p' AND mtag ='moth'),
( cid='terms-index' AND tag ='p' AND mtag ='moth'),
( cid='terms-index' AND tag ='p' AND mtag ='moth'),
( cid='terms-index' AND tag ='p' AND mtag ='moth')


Dit lukt niet , het is de bedoeling dat freq in elk specifiek geval 1 vermeerdert...

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Volgens mij klopt het gedeelte van WHERE niet echt.
code:
1
WHERE (statement), (statement), etc.
moet dat niet
code:
1
WHERE (statement) AND (statement)
zijn?

edit:
& veranderd in AND 8)7

[ Voor 0% gewijzigd door Postman op 10-10-2002 23:20 . Reden: Dank, o grote dbase boek! ]


Verwijderd

Topicstarter
OK , gevonden guys
deze code werkt
code:
1
2
3
4
5
6
UPDATE riptags SET freq=freq+1 WHERE( cid='terms-index' AND tag ='br' AND mtag ='moth')OR
( cid='terms-index' AND tag ='p' AND mtag ='moth')OR
( cid='terms-index' AND tag ='p' AND mtag ='moth')OR
( cid='terms-index' AND tag ='p' AND mtag ='moth')OR
( cid='terms-index' AND tag ='p' AND mtag ='moth')OR
( cid='terms-index' AND tag ='p' AND mtag ='moth')OR


dus "OR" ipv ","

Verwijderd

Topicstarter
AND werkte niet , probeerde ik ook

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
AND werkt wel maar levert waarschijnlijk niks op.

En je hebt een edit knop (Afbeeldingslocatie: http://images.tweakers.net/forum/templates/got/images/icons/edit.gif) gekregen. Niet elke zin moet in een apart bericht!!

Verwijderd

Topicstarter
Zag je laatste bericht juist na het posten van mijn laatste, ging gewoon snelst via QUICK REPLY (heeft ook zijn betekenis :P)

en btw , werkt niet met OR
want 2 maal het zelfde statement (dus + 2, nl 2 keer +1, ipv +1) wordt niet
gedaan :(

Heb het btw juist nogmaals getest met AND en spijtig genoeg ... geen enkel record wordt geupdate :(

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
En als je alleen dit doet:
code:
1
UPDATE riptags SET freq=freq+1 WHERE( cid='terms-index' AND tag ='br' AND mtag ='moth')

Stapje voor stapje je probleem proberen uit te sluiten. Grote lappen code kun je niet debuggen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 10 oktober 2002 @ 23:26:
en btw , werkt niet met OR
want 2 maal het zelfde statement (dus + 2, nl 2 keer +1, ipv +1) wordt niet
gedaan :(

Heb het btw juist nogmaals getest met AND en spijtig genoeg ... geen enkel record wordt geupdate :(

De OR doet precies wat de bedoeling is...
De AND ook trouwens ;)

Stel het je zo voor: Er wordt _eerst_ een lijst samengesteld voor de records die geupdate moeten worden.
Daarna worden ze geupdate.

Kortom als jij zegt: update a, a, a, a en a. Dan zegt de database, ok update (a en a en a en ... a) = a.
Niet a 5x updaten...

Wat jij lijkt te willen kan helemaal niet in één update query.... En zulk gedrag zou ik overigens hooglijk ongewenst vinden...
Als je precies wilt weten hoe de boel geupdate wordt doe dan een select query ala:
select distinct * from riptags where [jouw-where-deel]
En alle gevonden resultaten worden dus maar 1x geupdate.

Ik neem aan dat je bijv 1x br-tag terug krijgt en 4x p-tags oid?
Ik denk dat het best dan je per tag een aparte update query kan uitvoeren. En dus dan ipv +1 te doen +$counttags oid.

Verwijderd

Topicstarter
Wel kijk het zit zo:

hij explode all tags uit een html pagina (bv gamespot.com -> 1358 tags :P )
om deze allemaal appart in sql in te voegen ... redelijk veel queries (1358 ?? :|)
Daarom wou ik ze in 1 query invoegen.
Heb het nu zo opgelost : php steekt de tags in een array en verwerkt ze allemaal
$array[tag] bevat dan het aantal frequenties van die tag, en zo kan ik alles in 1 maal inserten , en niet eerst inserten freq='1' en dan updaten voor elke volgende frequentie (zo ging het nl voordien)

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Verwijderd schreef op 10 oktober 2002 @ 23:19:
code:
1
2
3
4
5
6
7
8
UPDATE riptags
SET freq=freq+1
WHERE( cid='terms-index' AND tag ='br' AND mtag ='moth')
OR ( cid='terms-index' AND tag ='p' AND mtag ='moth')
OR ( cid='terms-index' AND tag ='p' AND mtag ='moth')
OR ( cid='terms-index' AND tag ='p' AND mtag ='moth')
OR ( cid='terms-index' AND tag ='p' AND mtag ='moth')
OR ( cid='terms-index' AND tag ='p' AND mtag ='moth')
Mag ik eens vragen waarom er zoveel dingen dubbel in je query staan?
Wat dacht je van deze query?
code:
1
2
3
UPDATE riptags
SET freq=freq+1
WHERE cid='terms-index' AND mtag ='moth' AND (tag = 'br' OR tag = 'p')

Je hebt hem dan misschien niet meer nodig, maar alleen even ter info :)

Never underestimate the power of


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 11 oktober 2002 @ 08:45:
Wel kijk het zit zo:

hij explode all tags uit een html pagina (bv gamespot.com -> 1358 tags :P )
om deze allemaal appart in sql in te voegen ... redelijk veel queries (1358 ?? :|)
Daarom wou ik ze in 1 query invoegen.
Heb het nu zo opgelost : php steekt de tags in een array en verwerkt ze allemaal
$array[tag] bevat dan het aantal frequenties van die tag, en zo kan ik alles in 1 maal inserten , en niet eerst inserten freq='1' en dan updaten voor elke volgende frequentie (zo ging het nl voordien)

Ik mag toch hopen dat je niet 1358 verschillende tags krijgt :?

Je moet ze natuurlijk wel groeperen per tag, en dan als er 20x een br-tag inzit niet 20x de update set freq = freq + 1, maar dan gelijk 1x update set freq = freq + 20...
Pagina: 1