webdesign / development + awesome
Ignorantské INSERTy

3 malé tipy, s ktorými si ušetríte pár riadkov kódu a budete takí ťažkí frajeri, že sa už nezbavíte ženských (chlapov, v prípade, že to číta nejaká programátorka (do they even exist?:)).
Predstavte si, že vaša životná púť dospeje do situácie, kedy chcete niečo zapísať do MySQL tabuľky, ale nechcete sa zapodievať kontrolami, či daný záznam už existuje. Čo s tým..
1) Chcem vložiť riadok do tabuľky. Ak už existuje, nič sa nebude zapisovať.
INSERT IGNORE INTO vajcia (id, nazov, kaliber) VALUES(NULL, 'Vajčisko', 'masívny')
Úplne normálny INSERT s tým rozdielom, že keď ak by sa bili primárne kľúče alebo unikátne kľúče (čiže záznam už existuje), query sa odignoruje. Vloženie sa odignoruje alebo riadok sa uloží neočakávaným spôsobom aj ak bude obsahovať iné chyby, na čo si treba dávať pozor.
2) Chcem vložiť riadok do tabuľky. Ak už existuje, chcem update-núť jeho údaje
INSERT INTO checkins (id, id_user, id_venue, count, last_checkin) VALUES (NULL, 230, 6434, 1, NOW()) ON DUPLICATE KEY UPDATE count = count + 1, last_checkin = NOW()
Príklad ukazuje niečo ako "check in" na 4square. Pri prvom raze sa vloží záznam, že som na nejakom mieste vôbec bol, pri ostatných razoch sa zvýši počítadlo návštev a čas posledného check-in-u sa aktualizuje. Je to v podstate INSERT a UPDATE spojený do jednej query.
3) To isté čo druhý prípad, s malým rozdielom
Ak by som vkladal nejaký dlhý text, musel by som ho v predchádzajúcom spôsobe zopakovať 2x (raz v INSERTE a raz v UPDATE časti). Pri extrémne dlhých textoch by nám to teoreticky mohlo vadiť. Situáciu zachráni REPLACE.
REPLACE INTO poznamka (id, id_projekt, datum, text) VALUES (NULL, 42, '2012-12-12', 'Všetko som vybavil, môžme spustiť tú apokalypsu... [1MB dalsich kecov]')
Je tu však jedna zradafeature. Ak záznam existuje, vymaže sa a vloží sa nový, čiže sa zmení aj primárny kľúč (ak je AUTO_INCREMENTovací).
Bonus
Prvý prípad s INSERT IGNORE sa dá riešiť trocha lepším, ale divnejším spôsobom, použitím ON DUPLICATE KEY UPDATE, takto:
INSERT INTO vajcia (id, nazov, kaliber) VALUES(NULL, 'Vajčisko', 'masívny') ON DUPLICATE KEY UPDATE id = id
Výhoda je, že sa neignorujú žiadne chyby, iba duplicitné kľúče. Nevýhodou je trocha mätúca syntax.
Teraz si už len treba dávať pozor na tie ženské.
Najrýchlejší úvod do vytvárania web stránok
Tento návod som sa rozhodol napísať, keďže už dosť ľudí po mne chcelo, nech im vysvetlím ako sa dajú tvoriť vlastné web stránky, ako to všetko okolo nich funguje a kde sa to naučiť. Samozrejme, že si môžu nakúpiť knihy, ale tie bývajú spravidla tak rozťahané, že ich veľa ľudí ani nedočíta. Plus zaťažujú množstvom detailov, ktoré na začiatku iba mýlia a zdržujú.
Preto píšem tento návod čo najstručnejšie, aby slúžil ako alternatíva k prehnane ukecaným knihám a aby ste namiesto zbytočného čítania mohli radšej kódiť. :p
Najskôr zbežný prehľad o tom, čo všetko sa deje, keď si v prehliadači otvoríte nejakú stránku. To aby ste vedeli kde sa vlastne používajú všetky tie technológie ako je HTML, CSS, PHP, SQL, JavaScript, jQuery, AJAX a iné.
1) Zadáte URL adresu - to je celý ten text, čo vidíte hore v address bare prehliadača.

2) Na základe názvu stránky (t.j. domény) sa zistí IP adresa servera, na ktorom sa nachádza hľadaná stránka. (Na toto slúži DNS server, ktorého adresu poznáme)

GROUP_CONCAT
Jedným z dosť užitočných MySQL príkazov, ktorý nie je až taký známy, ako by sa na užitočnosť takého kalibru patrilo :), je GROUP_CONCAT. Používa sa ako agregujúca funkcia (s GROUP BY), podobne ako napríklad funkcia AVG, akurát že nerobí priemer zo všetkých prvkov stĺpca, ale ich pospája za sebou do jedného stringu.
Ako to funguje a načo je to dobré?
9 komentárov 

