Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] INSERT SELECT - duplikacja rekordu z kolumną AutoIncrement
Tomplus
post 31.08.2018, 10:53:32
Post #1





Grupa: Zarejestrowani
Postów: 1 488
Pomógł: 177
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Potrzebuję skopiować w prosty sposób rekord w bazie 1:1 z wyjątkiem ID, które musi być siłą rzeczy unikalne.
Więc stworzyłem coś takiego i nie działa.

  1. INSERT INTO `position`
  2. SELECT *
  3. FROM `position`
  4. WHERE id = 31253 AND cartId = 15647
  5. ON DUPLICATE KEY UPDATE id = MAX(id) + 1;


Z LAST_INSERT_ID() także

Oczywiście bez problemu można napisać zapytanie typu:

  1. INSERT INTO TABLE (a,b,c) SELECT a,b,c FROM TABLE WHERE id = ?;


Jednakże co z sytuacją gdy tabela ma dużo kolumn, albo może mieć w przyszłości dodatkową kolumnę która nie można zapomnieć pominąć przy duplikacji rekordu.


Go to the top of the page
+Quote Post
nospor
post 31.08.2018, 11:23:10
Post #2





Grupa: Moderatorzy
Postów: 34 740
Pomógł: 5778
Dołączył: 27.12.2004




Cytat
Jednakże co z sytuacją gdy tabela ma dużo kolumn, albo może mieć w przyszłości dodatkową kolumnę która nie można zapomnieć pominąć przy duplikacji rekordu.

Dobra regula jest zawsze pisac zapytania z wyszczegolnionymi polami. Nie powinienies polegac na kolejnsci pol w tabelach a dajac * wlasnie na takiej kolejnosci polegasz.
Duzo pol? No to trudno, skoro masz tak zle zrobiona baze to masz duzo pol i masz je wszystkie wyszczegolnic.
Dojdzie nowe? To modyfikujesz to zapytanie, tez nie problem.


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Tomplus
post 31.08.2018, 13:12:52
Post #3





Grupa: Zarejestrowani
Postów: 1 488
Pomógł: 177
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----




Czyli pozostaje mi rozwiązanie z kolejnym wypisem kolumn albo proteza typu:
  1. CREATE TABLE test_1 SELECT * FROM test WHERE id = 15;
  2. UPDATE test_1 SET id = (SELECT MAX(id) + 1 FROM test LIMIT 1);
  3. INSERT INTO test (SELECT * FROM test_1);
  4. DROP TABLE test_1;
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.10.2019 - 15:24