[Mysql] als SELECT is true dan INSERT

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

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
Is het mogelijk om in één query het volgende te doen?
Ik wil controleren of de waarde die erin moet worden gezet al voor komt in de database. Komt deze al voor dan moet er iets gebeuren. Komt deze nog niet voor in de database dan moet hij die erin plaatsen. Kan dit in query? Zo ja hoe zou dat er ongeveer uit moeten zien?

  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
Ja:
code:
1
2
INSERT INTO tabel
SELECT ... FROM ... .WHERE ...

https://fgheysels.github.io/


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ligt eraan wat er moet gebeuren als de waarde al voorkomt.

Never underestimate the power of


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 29-08 22:51

D2k

nee, tis mysql

Doet iets met Cloud (MS/IBM)


  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
cameodski schreef op 21 oktober 2002 @ 15:39:
Ligt eraan wat er moet gebeuren als de waarde al voorkomt.
Als de waarde al voorkomt dan moet er een melding worden gegeven, zoiets als "Deze waarde staat al in onze database"

  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
frankschers schreef op 21 oktober 2002 @ 15:40:
[...]


Als de waarde al voorkomt dan moet er een melding worden gegeven, zoiets als "Deze waarde staat al in onze database"


Waarom leg je dan geen unique index op die column waar die waarde kan in voorkomen.
Bij een insert met dezelfde waarde vang je de foutmelding die de databank geeft op en toon je uw eigen foutmelding.

https://fgheysels.github.io/


Verwijderd

Je haalt de waarde die is opgegeven uit de database,en kijkt of die bestaat! Bestaat ie, geef dan je eigen foutmelding!

Verwijderd

Mysql doet geen subselects, dus dat zou wel 'ns lastig kunnen worden ...

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
whoami schreef op 21 oktober 2002 @ 15:38:
Ja:
code:
1
2
INSERT INTO tabel
SELECT ... FROM ... .WHERE ...
Kun je me uitleggen wat dit precies doet? Ik heb op mysql.com gelezen maar is engels, ik begrijp het niet helemaal.

Verwijderd

Oeps...het moet in 1 query! :X
Met een klein PHP scripje zou het wel kunnen!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Heel vies:
gewoon de insert doen zonder de select.
En dan checken op error-code 1062 oid.

  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
ACM schreef op 21 oktober 2002 @ 15:51:
Heel vies:
gewoon de insert doen zonder de select.
En dan checken op error-code 1062 oid.


Waarom is dat vies?
* whoami vind dat niet vies.

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

Dat op 1062 checken zo ik wel vies vinden.

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
Don Facundo schreef op 21 oktober 2002 @ 16:00:
Dat op 1062 checken zo ik wel vies vinden.


Hmmm..... gewoon checken op een return waarde?
Exceptions enzo zijn wel mooier natuurlijk, maar eerst selecten en dan pas inserten is niet zo efficient.

https://fgheysels.github.io/


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 22:18

The Eagle

I wear my sunglasses at night

Wat denk je van een COUNT * ?

Bijv:

UPDATE <rij> where SELECT count (id) from TABEL = 0 OID

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Verwijderd

The_Eagle schreef op 21 oktober 2002 @ 16:12:
Wat denk je van een COUNT * ?

Bijv:

UPDATE <rij> where SELECT count (id) from TABEL = 0 OID
tis MYSQL!

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
Dus het gaat niet?

Verwijderd

nope

afgezien van die error afvangen. Je kunt natuurlijk eerst ook gewoon netjes een select doen om te checken :) daar is die database uit eindelijk ook voor gemaakt ;)

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Het beste is om desbetreffende kolom uniek te maken en vervolgens gewoon een insert doen en eventuele fouten afvangen. Unieke constraints zijn tenslotte niet voor niks uitgevonden.
Je kunt wel een aparte query gaat uitvoeren om te kijken of ie al bestaat, maar in een multi-user omgeving kan dat dus fout gaan.

Never underestimate the power of


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 22:18

The Eagle

I wear my sunglasses at night

Tsja dan zal het een scrippie worden he.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 00:09
Geneste query maken ?
Als ERGENS de documentatie wel superdegelijk van is, dan is het wel van MySql. Ff zoeken dus :P

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Wat versta jij onder een genest query?
En wat denk je daar mee te bereiken? :?

Never underestimate the power of


  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
Lukt het misschien hiermee?

code:
1
2
3
4
BEGIN;
SELECT @A:=count(news_id) FROM news WHERE news_id=6;
INSERT INTO news (title) VALUES (@A+1);
COMMIT;


Dit is een geldig iets in MySql.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ik denk het niet.
Je doet altijd een insert.

Never underestimate the power of


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

frankschers schreef op 21 oktober 2002 @ 16:56:
Lukt het misschien hiermee?

code:
1
2
3
4
BEGIN;
SELECT @A:=count(news_id) FROM news WHERE news_id=6;
INSERT INTO news (title) VALUES (@A+1);
COMMIT;


Dit is een geldig iets in MySql.

Je zou het ook kunnen testen...
JIJ wilt het weten toch :?

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

cameodski schreef op 21 oktober 2002 @ 16:59:
Ik denk het niet.
Je doet altijd een insert.
Simpele gedachtegang van mij zegt me dat de INSERT niet uitgevoerd wordt als de SELECT fout gaat, omdat we hier te maken hebben met een heuse transactie.

Oftewel, lees de manual, leer SQL en je had kunnen weten dat dit een transactie is en waarom het werkt, volgens mij.

edit: een "INSERT INTO ... SELECT ..." werkt natuurlijk ook, want in die SELECT clause kun je iets conditioneels zetten voor hetgeen je wilt inserten. Voorbeeldje:
code:
1
INSERT INTO Tabel1 SELECT 'blaat' FROM Tabel2 WHERE Conditie=1

日本!🎌


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

_Thanatos_:
edit: een "INSERT INTO ... SELECT ..." werkt natuurlijk ook, want in die SELECT clause kun je iets conditioneels zetten voor hetgeen je wilt inserten. Voorbeeldje:
code:
1
INSERT INTO Tabel1 SELECT 'blaat' FROM Tabel2 WHERE Conditie=1

|:( |:( |:(
M Y S QL !!!!!!!

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


Dat kan wel degelijk in mysql hoor :)
Maar het is alleen een klein beetje precies het omgekeerde van wat frank wil...

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
_Thanatos_ schreef op 21 oktober 2002 @ 17:52:
Simpele gedachtegang van mij zegt me dat de INSERT niet uitgevoerd wordt als de SELECT fout gaat, omdat we hier te maken hebben met een heuse transactie.
Inderdaad simpel.
Oftewel, lees de manual, leer SQL en je had kunnen weten dat dit een transactie is en waarom het werkt, volgens mij.
Volgens jou, maar volgens mij geeft de SELECT nooit ook maar één foutmelding. Dus wordt de insert altijd uitgevoerd en dat was toch echt niet de bedoeling.

By the way: De manual heb ik gelezen, aan mijn SQL-kennis mankeert helemaal niets en transacties zijn in dit geval helemaal niet relevant.
Conclusie: volg je eigen advies op en zorg vooral voor ervaring en tegen de tijd dat je net zoveel ervaring hebt met SQL als ik (over een jaartje of vijf dus), dan spreken we elkaar wel weer.

Never underestimate the power of


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ow, de select kan best fout gaan hoor :)
Maar alleen als ie als query foutief geformuleerd is ofzo, het is niet zo dat er een unique-contraint wordt geschonden door een select waardoor de transactie afgebroken wordt.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
ACM schreef op 21 oktober 2002 @ 18:03:
Ow, de select kan best fout gaan hoor :)
Grapjas! :) :)
Je hebt gelijk, maar ik was even inhoudelijk aan het reageren en dus niet echt aan syntax fouten e.d. aan het denken.
En bedankt voor de correctie. :)

Never underestimate the power of

Pagina: 1