MYSQL If EXISTS

Programovacie jazyky, rady, poradňa...
etman
Amateur
Amateur
Príspevky: 15
Registrovaný: 15 okt 2006, 23:32
Kontaktovať používateľa:

MYSQL If EXISTS

Príspevok od používateľa etman »

Ahojte, snazim sa najst ci existuje moznost sql statementu aby. Ak existuje zaznam tak ho updatol ak zaznam neezistuje tak vytvori novy. UNIQUE je UNIQUE ID

skusal som tento SQL statement ale nefunguje

Kód: Vybrať všetko

IF EXISTS (SELECT unique_id FROM tabulka
      WHERE unique_id = '827011')
      THEN
      UPDATE tabulka
      SET size        = '6',
      color     = '3233'
      WHERE unique_id = '827011'
      ELSE
      INSERT INTO tabulka ( descr,size,unique_id ,colcode_id,color)
      VALUES('fasfasdf','454545','665646','34563456','777777')
      END 
Dakujem
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: MYSQL If EXISTS

Príspevok od používateľa audiotrack »

možno by si mohol byť konkrétnejší. Hlavne aký je vzťah medzi tým updatovaním a vkladaním. Nejak v tom tvojom príklade nevidím logiku prečo hladáš jedno id, a ak neexistuje tak vkladáš záznam s iným id...
Mohol by si si ale pozreť replace, myslím že to rieši tvoj problém
etman
Amateur
Amateur
Príspevky: 15
Registrovaný: 15 okt 2006, 23:32
Kontaktovať používateľa:

Re: MYSQL If EXISTS

Príspevok od používateľa etman »

audiotrack napísal:možno by si mohol byť konkrétnejší. Hlavne aký je vzťah medzi tým updatovaním a vkladaním. Nejak v tom tvojom príklade nevidím logiku prečo hladáš jedno id, a ak neexistuje tak vkladáš záznam s iným id...
Mohol by si si ale pozreť replace, myslím že to rieši tvoj problém

Ahoj. V prvom rade by som chcel aby to skontrolovalo ci sa dany zaznam v DB nachadza ak ano tak len updatne dane hodnoty. Ak sa dany zaznam nenachadza tak nech vlozi do tabulky. Toto som dal len priklad ktory skusam cez phpmyadmin. Chcel by som to pouzit v php kde mam premenne.
Ovecka
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1227
Registrovaný: 25 aug 2005, 0:57

Re: MYSQL If EXISTS

Príspevok od používateľa Ovecka »

ja to riesim tak ze si najpr overim SELECTOM ci uz zaznam nieje v db napriklad SELECT id FROM hojko WHERE meno=ShepDog ak je tak SQL UPDATE WHERE select[id] ak nie SQL INSERT
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: MYSQL If EXISTS

Príspevok od používateľa audiotrack »

keď to chceš v php, tak to vela veci zjednodušuje. Najjednoduchšie je to spraviť cez dvojicu query v podmienke ako napísal kolega nadomnou ^
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MYSQL If EXISTS

Príspevok od používateľa chrono »

Ak ide len o MySQL, tak potom INSERT ... ON DUPLICATE KEY UPDATE.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: MYSQL If EXISTS

Príspevok od používateľa audiotrack »

chrono napísal:Ak ide len o MySQL, tak potom INSERT ... ON DUPLICATE KEY UPDATE.
ale:
1) to mu updatne všetky hodnoty a nie len tie dve, a teda je to rovnaké ako moje replace
2) nie je toto náhodou vec mysql 5+?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MYSQL If EXISTS

Príspevok od používateľa chrono »

1. Ty tam môžeš (na konci) určiť, čo sa má upraviť, ak už ten primárny kľúč v DB je (takže sa dá urobiť aj to, čo chce on).
2. Bolo to už v 4.1.
etman
Amateur
Amateur
Príspevky: 15
Registrovaný: 15 okt 2006, 23:32
Kontaktovať používateľa:

Re: MYSQL If EXISTS

Príspevok od používateľa etman »

Caute presnejsie ten kod by mal vyzerat takto

Kód: Vybrať všetko

mysql_query("IF (EXISTS (SELECT unique_id FROM sortiment AS t1
  WHERE t1.unique_id = '{$item['unique']}'))
begin
  UPDATE sortiment
  SET size = '{$item['size']}', price = '{$item['sellingprice']}', 
  u_date = '{$c_date}', u_time = '{$c_time}'
  WHERE unique_id = '{$item['unique']}'
end
else
begin
  INSERT INTO sortiment(descr, size, unique_id ,colcode_id,price,c_date, c_time ) values
  ('{$item['description']}','{$item['size']}','{$item['unique']}','{$item['colcode']}','{$item['sellingprice']}','{$c_date}','{$c_time}')
end 
   }")
kde mam definovane premenne, kde bude updatovat alebo inserovat podla pravidla nenajde unique tak insertne najde unique tak updatne size, price. A to je vsetko len neako to nefunguje.

Na serveri je nainstalovane mysql verzie: 5.0.51a-24+lenny3-log

Bud by som to riesil tymto sposobom (ak pojde) kedze mi vyhazduje error

Kód: Vybrať všetko

SQL query: Documentation

IF EXISTS (
SELECT unique_id
FROM tabulka
WHERE unique_id = '827011'
)
UPDATE sortiment SET size = '6',
color = '3233' WHERE unique_id = '827011' ELSE INSERT INTO sortiment( descr, size, unique_id, colcode_id, color )
VALUES (
'fasfasdf', '454545', '665646', '34563456', '777777'
)

MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS (SELECT unique_id FROM tabulka WHERE unique_id = '827011')
    UPDATE' at line 1 
len rozmyslam ci tam nemam nieco zle napisane.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: MYSQL If EXISTS

Príspevok od používateľa audiotrack »

prečo ignoruješ chronov príspevok?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MYSQL If EXISTS

Príspevok od používateľa chrono »

Čo tak niečo takéto:

Kód: Vybrať všetko

INSERT INTO sortiment (descr, size, unique_id ,colcode_id,price,c_date, c_time )
	VALUES ('{$item['description']}','{$item['size']}','{$item['unique']}','{$item['colcode']}','{$item['sellingprice']}','{$c_date}','{$c_time}')
	ON DUPLICATE KEY UPDATE size = '{$item['size']}', price = '{$item['sellingprice']}', u_date = '{$c_date}', u_time = '{$c_time}';
etman
Amateur
Amateur
Príspevky: 15
Registrovaný: 15 okt 2006, 23:32
Kontaktovať používateľa:

Re: MYSQL If EXISTS

Príspevok od používateľa etman »

chrono napísal:Ak ide len o MySQL, tak potom INSERT ... ON DUPLICATE KEY UPDATE.
Toto vyzera zaujimavo len ci som to spravne poxopil. ON DUPLICATE KEY hlada v stlpci ktory je UNIQUE alebo INDEXOVANI v mojom pripade unique_id ak taky nenajde tak insertne ak najde tak updatne hodnoty ktore budu za touto funkciou
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MYSQL If EXISTS

Príspevok od používateľa chrono »

Kontroluje sa unikatny a/alebo primárny (teda len prípad, keď by INSERT zlyhalo pre duplikátny záznam).
Napísať odpoveď