Ostatnio, z powodu zmiany w kodzie pewnego CMSa, musiałem dopisać do bazy danych (MySQL) kilkadziesiąt bardzo podobnych do siebie rekordów. Największym problemem było to, że każdy wiersz musiał dostać swój kolejny numer (powiększony o stałą). Ponieważ w MySQL nie ma odpowiednika Oracle'owego ROWNUM musiałem ten problem obejść.

Numer wiersza można obliczyć tworząc sobie zmienną.

MySQL:
  1. SELECT @rownum := @rownum + 1 rownum, i.*
  2. FROM (SELECT @rownum := 0) r, informacja i

Po skorzystaniu z dobrodziejstw INSERT ... SELECT moje ostateczne zapytanie dodające operacje do modułów CMSa, które tej operacji jeszcze nie mają, wyglądało tak.

MySQL:
  1. INSERT INTO operacja(priorytet, id_modul, nazwa, kod)
  2. SELECT @rownum := @rownum + 1 priorytet, m.id_modul, 'lista', 'lista'
  3. FROM (
  4.     SELECT @rownum := (
  5.         SELECT max(id_operacja) FROM operacja
  6.     )
  7. ) r, ecms_modul m
  8. WHERE id_modul NOT IN (
  9.     SELECT id_modul FROM operacja WHERE kod = 'lista'
  10. );