Příkaz insert s where – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Příkaz insert s where – MySQL – Fórum – Programujte.comPříkaz insert s where – MySQL – Fórum – Programujte.com

 

Pavelv0
Stálý člen
26. 7. 2014   #1
-
0
-

Zdravím, jak vložit do tabulky řádek pouze pokud je splněna určitá podmínka. Něco jako "insert into tab set data = 'xxx' where nevim != 'yyy' " - pokud není nalezena hodnota 'yyy' ve sloupci nevim, pak vlož nový řádek....

Nahlásit jako SPAM
IP: 109.235.7.–
KIIV
~ Moderátor
+43
God of flame
26. 7. 2014   #2
-
0
-

takhle primo ne, ale  je tam: on duplicate key set ... (musis pak mit samozrejme unique index nad tim co chces mit unikatni)

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
26. 7. 2014   #3
-
0
-

#1 Pavelv 

INSERT INTO tabulka SELECT ... WHERE ...

Také se na to dá napsat trigger. Často však stačí označit sloupec jako unikátní.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
26. 7. 2014   #4
-
0
-

#3 Kit
podle popisu hleda spis to   INSERT INTO ... ON DUPLICATE KEY UPDATE neco=..., ...

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Pavelv0
Stálý člen
26. 7. 2014   #5
-
0
-

#3 Kit
Můžeš trochu rozepsat to s tím select? Nebo sloupce s hodnotama umístím na konec? Unikátnost nestačí, potřebuji kontrolovat více sloupců najednou...

Nahlásit jako SPAM
IP: 109.235.7.–
KIIV
~ Moderátor
+43
God of flame
26. 7. 2014   #6
-
0
-

unikatni index jde udelat pres vic sloupcu

insert into tabulka select * from jina    je jen na kopirovani dat z jednoho mista na druhe .. co vybere select se vlozi insertem 

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
26. 7. 2014   #7
-
0
-

#5 Pavelv
Záleží a tom, co všechno chceš kontrolovat. možná ti skutečně bude stačit unikánost přes více sloupců.

Ten select by mohl vypadat třeba takto: 

INSERT INTO user (nick) SELECT 'Kit' AS nick WHERE lenght('Kit')>=3;

Jenže se to dá udelat jednodušeji viz výše.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
26. 7. 2014   #8
-
0
-

vykonavat logiku na urovni databazy neni velmi vhodne ... takto nezistis ci sa nieco vlozilo alebo nie (resp musis kontrolovat ci ti vratilo cislo co nemusi fungovat v kazdej databaze a zaroven nemozes vediet preco je to cislo take ake je)

Nahlásit jako SPAM
IP: 95.103.199.–
https://github.com/Flowy
Kit+15
Guru
26. 7. 2014   #9
-
0
-

#8 Flowy
Kam patří logika, když ne do databáze?

Stavové kódy fungují velmi dobře a bývá k nim i textový popis. Co víc by sis mohl přát?

Pro zajímavost: Stavový kód není číslo, ale string.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
3. 8. 2014   #10
-
0
-

#7 Kit
A pokud potřebuji vložit do tabulky záznam pouze pokud nová hodnota je odlišná od předchozí v určitém rozmezí? Něco jako  

INSERT INTO tab SET prom = 'value'WHERE prom > 'value' ORDER BY id DESC
Nahlásit jako SPAM
IP: 109.235.7.–
Kit+15
Guru
3. 8. 2014   #11
-
0
-

#10 Pavelv
Zkus si přečíst něco o R-stromech. Použij integritní omezení v hlavičce tabulky.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
3. 8. 2014   #12
-
0
-

#11 Kit
Takže bych musel překopat tabulku, jestli se nepletu. V tabulce mam několik číselných sloupců, a potřebuji zajistit, aby při vkládání dat, vyhovovala nová hodnota vzorci "stará - 5 < nová < stará + 5". A takto pro každý sloupec. Jde mi o to, jestli je jednodušší to řešit na úrovni MySQL, nebo php, kterým tam ty hodnoty vkládam.

Nahlásit jako SPAM
IP: 109.235.7.–
Kit+15
Guru
3. 8. 2014   #13
-
0
-

#12 Pavelv
Pokud tím překopáním  myslíš jeden ALTER TABLE, tak ano.

Možná by na to stačila nějaká vnořená procedural nebo ještě lépe trigger.

Proč pro každý sloupec? Máš takových víc? Zkus ten trigger.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
3. 8. 2014   #14
-
0
-

#13 Kit
Díky, podívám se na ten triger. Představ si, že mám například tabulku, kde každý sloupec reprezentuje nějakou měřenou veličinu, která se nemůže skokově měnit. Takže při vložení nového řádku si vždy zkontroluji zda nedošlo k nějakému omylnému zadání dat. Myslel jsem, že by se to nechalo řešit přes IF v DB, ale zřejmě ne. Jdu vyzkoušet ten triger...

Nahlásit jako SPAM
IP: 109.235.7.–
Kit+15
Guru
3. 8. 2014   #15
-
0
-

#14 Pavelv
Pokud to jsou ručně pořizovaná data, ošetřil bych to v JS na klientovi. Jinak až při zpracování výsledků.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
3. 8. 2014   #16
-
0
-

#13 Kit
Jak přerušim akci v příkazu IF? Mám triger, kde ověřuji  

create trigger kontrola
before insert
on tab
for each row
begin
  if new.data>(old.data + 5) then ........;
  end if;
end; 
Nahlásit jako SPAM
IP: 109.235.7.–
Kit+15
Guru
3. 8. 2014   #17
-
0
-

#16 Pavelv
Vyvolej chybu.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
3. 8. 2014   #18
-
0
-

#15 Kit
Výsledky zpracovává několik scriptů, navíc potřebuji aby zpracování bylo co nejrychlejší, a proč zbytečně plnit databázi nesmyslama. Proto to chci řešit na vstupu. Data přijmu na serveru pomocí GET requestu, zpracuji v php, a uložím. Takže řešení bude jedině v tom php, nebo mysql

Nahlásit jako SPAM
IP: 109.235.7.–
Kit+15
Guru
3. 8. 2014   #19
-
-1
-
Mimo téma

#18 Pavelv
Data se přijímají zásadně metodou POST - má to v názvu. Metoda GET je určena pro čtení.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
3. 8. 2014   #20
-
0
-

#8 Flowy
Máš snad něco proti metodě POST nebo ji jen neumíš používat?

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
3. 8. 2014   #21
-
0
-

#19 Kit
Záleží jak kde. Zařízení, kterým data vkládám do db, umí jen zadat adresu a stáhnout odpověď serveru.

Jak vyvolám v MySQL uměle chybu, krom chyby vyvolané na primárním klíči?

Nahlásit jako SPAM
IP: 109.235.7.–
Kit+15
Guru
3. 8. 2014   #22
-
0
-

#21 Pavelv
Třeba 

SIGNAL SQLSTATE '55555';

V manuálu MySQL je to popsáno.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
4. 8. 2014   #23
-
0
-

for/while se obvykle prerusuje pomoci break. Googlem jsem nasel neco jako LEAVE label; (v pascalu asi neco jako goto label;)

Nahlásit jako SPAM
IP: 2001:718:2601:258:68d1:47...–
Flowy0
Věrný člen
4. 8. 2014   #24
-
+1
-
Zajímavé
Kit +

#20 Kit
sry premyslel som si to a pravdepodobne mas v zasade pravdu

Nahlásit jako SPAM
IP: 91.148.1.–
https://github.com/Flowy
Flowy0
Věrný člen
7. 8. 2014   #25
-
0
-

#19 Kit
zdalo sa mi to "zasadne" velmi vylucujuce ... napr nedokazes prenasat query so statusom 302 cize musis dat data do get (mam stranku v facebook iframe a facebook mi preposiela data cez query ... lenze tie data musi nejak dostat - najlepsie cez query ... lenze na facebook stranku sa musim dostat z OpenGraph objektu ktory ma vlastnu adresu a z tejto musim uzivatela presmerovat (a facebook botovy zobrazit dany objekt) ... kedze presmerovavam na iny server (na fb) tak som pouzil radsej 302 aby sa niekto nezasekol na zakazanom redirecte

moznost ulozit OG objekt do zobrazovanej stranky som premyslel a neni mozna - potrebujem vztah dataPreStranku:Stranka ako M:1

ak si ale to zasadne myslel ako vecsinou tak zase nic :)

Nahlásit jako SPAM
IP: 95.103.172.–
https://github.com/Flowy
Kit+15
Guru
7. 8. 2014   #26
-
0
-

#25 Flowy
Třeba takové meteostanice často metodu POST ani neumí. Další výjimka z pravidla.

Začátečníci by se měli učit podle pravidel. Je například dobré jim zatajit goto, else a další nežádoucí klíčová slova. Výjimky jsou určeny pro pokročilé, kteří vědí, co dělají.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
7. 8. 2014   #27
-
0
-

nemyslim si ze zatajovanie informacii comukolvek pomoze ... skor verim v slobodnu volbu a ta je najlepsia z uplnych informacii (pripadne pridat vlastny nazor pre objasnenie) ... samozrejme chce to viac prace

Nahlásit jako SPAM
IP: 95.103.172.–
https://github.com/Flowy
Kit+15
Guru
8. 8. 2014   #28
-
0
-

#27 Flowy
V tom případě mi není jasné, proč se začátečníkům v OOP zatajuje polymorfismus, DI, LSP a další užitečné principy ze SOLID. V SQL místo JOIN píší IN a používají zastaralé ovladače, které neumí prepared statements. Místo šablon zase nějaké Smarty či co. Proč se tedy učí tyhle nesmysly? Protože jsou jim zatajovány kvalitní technologie.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
8. 8. 2014   #29
-
0
-

spis ucitele se zivi znalostmi php4 a prakticky se php uz dal nezabyvaji. Ten gogglem najdes navody a priklady pro php4.
Tudle jsem chtel po jednom nasem pedagogovi, aby si nastavil v programu kodovani na utf nebo aspon konverzi pomoci SET NAMES. Myslis, ze to udelal? Takovou praci mi dalo pri upgradu serveru prevest vsechny db do utf z nejakych pseudo kodovani jako latin1, win1250, ... A kvuli nemu jsem musel jeho db prevadet zpet na latin1 a nahrat do db jakoze je to utf8 :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:b9e1:99...–
KIIV
~ Moderátor
+43
God of flame
8. 8. 2014   #30
-
0
-

#29 peter
kdyz se chces neco naucit, tak se to musis naucit sam..

Malo ktery ucitel, ktery v oboru nepracuje, uci aktualni veci a hlavne vubec sleduje trendy v oboru.. (to zminoval i jeden profesor pedagogiky - vetsina ucitelu se neco nauci, a uci to pak porad - tudiz uci historii daneho predmetu + ze ucitele jsou vlastne ti nejmene pruzni pracovnici z oboru, kde se pouziva "mozek" - proste se brani zmenam)

Mimochodem OOP neni tak snadne na nauceni.. clovek musi nejprve pochopit jeho vyhody a principy - a kdyz je do toho hozen rovnou, vznikaji naivni implementace nebo dokonce proceduralni kod v oop

Takze za me je lepsi zacit na proceduralnim jazyku a pak teprve clovek dokaze ocenit vsechny vyhody oop

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
8. 8. 2014   #31
-
0
-

#30 KIIV
Tuhle jsem přepisoval jeden procedurál do OOP. Vyšel poloviční,  jednodušší a robustnější. Takže jsem se procedurálem přestal zabývat.

Když má někdo v každé třídě jiné názvy metod, tak se polymorfismus dělá blbě.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
8. 8. 2014   #32
-
0
-

#29 peter
Kolem Unicode v MySQL je docela dost zmatků. Kdyby UTF-8 bylo default, bylo by to mnohem lepší. Sám používám pouze UTF-8.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
8. 8. 2014   #33
-
0
-

#28 Kit
V SQL místo JOIN píší IN

 a?

Nahlásit jako SPAM
IP: 91.148.1.–
https://github.com/Flowy
Kit+15
Guru
8. 8. 2014   #34
-
0
-

#33 Flowy
Oba operátory mají svá použití, která se částečně překrývají.

Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
14. 8. 2014   #35
-
+1
-
Zajímavé
Kit +

#26 Kit

http://martinfowler.com/articles/distributed-objects-microservices.html

Given this uncertainty, the most important thing a writer like myself can do is to communicate as clearly as I can the lessons we think we've learned, even if they are contradictory. Readers will make their own decisions, it is our job as writers to make sure those decisions are well-informed ones, whichever side of the architectural line they fall.

Nahlásit jako SPAM
IP: 91.148.1.–
https://github.com/Flowy
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

.insert() — založil Josef Hornych

Hromadný insert — založil Paja2

Podmíněný insert — založil hlucheucho

Insert do ms sql v c# — založil JannyM

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý