T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
2nd March

MySQL dupliciranje podatkov z INSERT INTO SELECT stavkom

Včasih potrebujemo določeno vsebino v posamezni tabeli podvojiti, naj bo to zaradi testnih razlogov ali zaradi dodatnih podatkov, ki jih potrebujemo in si prihranimo delo z ročnim vnašanjem. Na primer imamo podatke za določeno napravo, sedaj želimo podvojiti te podatke ter jih obenem malce spremeniti.

Pri standardnem uvozu podatkov v posamezno tabelo uporabljamo INSERT INTO stavek. Lahko izberemo med krajšo obliko, kjer naprej navedemo tabelo in nato vse stolpce za katero imamo definirano vrednost in nato posamezne sklope vrednosti, ki jih omejimo z oklepajema, ki jih ločimo z vejicami. Primer:

SQL:
  1. INSERT INTO `files` (`file_id`, `file_extension`, `file_size`) VALUES
  2. (25, 3, 'jpg', '20535'),
  3. (34, 3, 'jpg', '23598'),
  4. (35, 2, 'pdf', '412893');

Zaradi preglednosti lahko tudi za vsako vrstico zapišemo oz. defenirano seznam vrednosti, ki jih želimo zapolniti oz. imamo definirane vrednosti:

SQL:
  1. INSERT INTO `files` (`file_id`, `file_extension`, `file_size`) VALUES (25, 3, 'jpg', '20535');
  2. INSERT INTO `files` (`file_id`, `file_extension`, `file_size`) VALUES (34, 3, 'jpg', '23598');
  3. INSERT INTO `files` (`file_id`, `file_extension`, `file_size`) VALUES (35, 2, 'pdf', '412893');

Poznamo pa še krajšo verzijo od prve in sicer tako, da ne navedemo seznam stolpcev katere želimo zapolniti pri čemer moramo poskrbeti, da nato zapolnimo vsa polja, ki so defenirana v posamezni tabeli. Primer:

SQL:
  1. INSERT INTO `files` VALUES (25, 3, 'jpg', '20535');

No, vrnimo se k prvotni problematiki in sicer kopiranju vsebine v posamezni tabeli s pomočjo SELECT stavka. Preprost primer:

SQL:
  1. INSERT INTO ecards (`id`, `category_id`, `name` `hidden`, `created`, `modified`) SELECT NULL, category_id, name, hidden, NOW(), NOW() FROM `table` WHERE smt='tst'

Null vrednost uporabimo za ID, s tem povzročimo auto-increment na primarnem ključu. Za ne-primarne ključe, kjer želimo za vsako vrstico povečati ID pa lahko uporabimo dodatno spremenljivko. Primer:

SQL:
  1. SELECT @row_id := (SELECT MAX(id) FROM `table`);
  2. INSERT INTO `table1` (SELECT @row_id := @row_id + 1, drugi_stolpec, tretji_stolpec FROM `table1`)

Dodatno lahko izvajamo tudi pod-izvedbe znotraj same izvedbe, primer:

SQL:
  1. INSERT INTO ecards SELECT
  2. NULL, (SELECT category_id FROM categories AS t1 WHERE smt='test' AND t1.name=(SELECT name FROM ategories AS t2 WHERE t2.category_id=ecards.category_id )), ecards.name, ecards.file, ecards.hidden, NOW(), NOW() FROM `ecards` WHERE ecards.polje='nekaj'

Z zgornjo poizvedbo pri kopiranju samih podatkov tudi pridobimo pravi ID kategorije, ki se razlikuje za posamezne sklope. Ker ima vsak posamezen sklop svoje kategorije moramo pri kreiranju podvojenega sklopa popraviti tudi id-je, ki kažejo na kopirane kategorije. Zato naredimo dve pod poizvedbe, kjer id kategorije dobimo preko imena trenutne kategorije.

Dodatne informacije:

Delodajalec: KMAG d.d.

Deli s skupnostjo:

  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Podobni članki:

  1. MySQL kreiranje tabele s SELECT stavkom
  2. Hitri vnos/uvoz podatkov v MySQL preko LOAD DATA INFILE
  3. Pretvorba PHP MySQL aplikacije v PHP MS SQL aplikacijo (apache, php, mdb2, mysql => iis, php, mdb2, mssql)
  4. MySQL število vseh najdenih vrstic
  5. Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like
  6. Operacije nad seznami – Javascript DOM – HTML select – HTML option
  7. Select – dropdown – width – internet explorer
  8. MySQL date BETWEEN – DATE FORMAT
  9. AJAX iskanje in dodajanje v seznam (select) z dodatnimi informacijami
  10. MySQL iskanje LIKE vs FULL-TEXT

Dodaj komentar