Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Update Duplicate entry ....
murasek
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.05.2016

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


Witam,

Polecenie w bazie MySQL: Update shop_product set symbol=symbol+'0'

wyrzuca błąd: #1062 - Duplicate entry '0' for key 'shop_product_symbol'

Chcę zmienić indeksy (symbol) wszystkich artykułów z tabeli shop_product z 6 znakowych w systemie abk130 na 7 znakowe, czyli abk1300.
Pojawia się błąd jw.

Co powinienem zmienić w poleceniu?
Z góry dziękuję za pomoc.


Go to the top of the page
+Quote Post
Tomplus
post
Post #2





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

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


Spróbuj tym zapytaniem
Kod
Update shop_product set symbol=CONCAT(symbol,'0');


Komunikat masz konkretny, pojawia ci się zapytanie gdzie chcesz powtórzyć unikalny symbol i prawdopodobnie posiadasz JUŻ - także np. abk1300.

Jak proponowałbym zrobić inaczej.

Stworzyć kolumnę symbol2 [ale nie unikalną] a następnie dopiero dodać to ZERO. Potem tylko zmienisz nazwy.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #3





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Cytat(Tomplus @ 8.05.2016, 08:00:08 ) *
Stworzyć kolumnę symbol2 [ale nie unikalną] a następnie dopiero dodać to ZERO. Potem tylko zmienisz nazwy.

Nie idź to drogą. Więcej problemów możesz sobie narobić...
Go to the top of the page
+Quote Post
Tomplus
post
Post #4





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

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


Wszystko zależy od skomplikowania bazy i jak dużą ilość rekordów posiadamy.
Przy referencjach nie warto.

Go to the top of the page
+Quote Post
Pyton_000
post
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Albo użyj

  1. UPDATE IGNORE shop_product SET symbol=symbol+'0'
Go to the top of the page
+Quote Post
murasek
post
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.05.2016

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


Cytat(Pyton_000 @ 8.05.2016, 11:55:38 ) *
Albo użyj

  1. UPDATE IGNORE shop_product SET symbol=symbol+'0'


Obawiam się stwożyć dotakową kolumnę, więc skorzystałem z
  1. pobierz, plaintext
  2. UPDATE IGNORE shop_product SET symbol=symbol+'0'



Jednak zamiast dodać 0 do wszystkich wierszy kolumny symbol polecenie to zminiło tylko pierwszy wiersz w tej kolumnie na wartość 0.
Co z tym zrobić?

W kolumnie jest ok 7000 wierszy (indeksów artykułów).

Podobną operację (dodania 0 do indeksów artykułów) zrobiłem w systemie WF-MAG (baza SQL), ale to przez pomoc ASSECO (produceta).
Polecenie było trochę odmienne ze względu na specyfikację innych artykułów niż te w sklepie www. Wyglądało tak:
  1. pobierz, plaintext
  2. USE wapro.
  3.  
  4. Declare @idm numeric
  5.  
  6.  
  7.  
  8. SELECT @idm=0
  9.  
  10.  
  11. While 1=1
  12.  
  13. Begin
  14.  
  15. IF NOT EXISTS (SELECT 1 FROM magazyn WHERE id_magazynu>@idm)
  16.  
  17. Break
  18.  
  19. SELECT top 1 @idm=id_magazynu FROM magazyn WHERE id_magazynu>@idm ORDER BY id_magazynu
  20.  
  21.  
  22. UPDATE artykul SET indeks_katalogowy=indeks_katalogowy+'0' WHERE Id_magazynu=@idm AND len(indeks_katalogowy)=6 AND indeks_katalogowy+'0' NOT IN (SELECT indeks_katalogowy FROM artykul WHERE id_magazynu=@idm)
  23.  
  24. End



Może to coś naprowadzi ....

Cytat(Tomplus @ 8.05.2016, 08:00:08 ) *
Spróbuj tym zapytaniem
Kod
Update shop_product set symbol=CONCAT(symbol,'0');


Komunikat masz konkretny, pojawia ci się zapytanie gdzie chcesz powtórzyć unikalny symbol i prawdopodobnie posiadasz JUŻ - także np. abk1300.

Jak proponowałbym zrobić inaczej.

Stworzyć kolumnę symbol2 [ale nie unikalną] a następnie dopiero dodać to ZERO. Potem tylko zmienisz nazwy.


Baza ma ponad 7000 rekordów, więc rzeczywiście możliwe jest, że jest jakiś rekord 7 znakowy z 0, ale jak to można obejść bez tworzenia dodatkowej kolumny, czego się obawiam.

Cytat(mmmmmmm @ 8.05.2016, 09:20:56 ) *
Nie idź to drogą. Więcej problemów możesz sobie narobić...


Nie poszedłem (IMG:style_emoticons/default/smile.gif) . Tylko co proponujesz?

Ten post edytował murasek 8.05.2016, 15:13:53
Go to the top of the page
+Quote Post
com
post
Post #7





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


no a próbowałeś użyć tego zapytania z concat?
Go to the top of the page
+Quote Post
Tomplus
post
Post #8





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

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


Więc jak zmieniło ci na wartość 0 to oznacza że symbol = symbol + '0' nie działa, do operacji na stringach służy właśnie CONCAT.

A zanim użyjesz, możesz sprawdzić czy rekord o symbolu z dodatkowym zerem istnieje. Jeżeli istnieje to może należy przemyśleć co chcesz zrobić, bo być może powinny być dodane dwa zera. A może jakaś specjalna sekwencja znaków.
Go to the top of the page
+Quote Post
murasek
post
Post #9





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.05.2016

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


Cytat(Tomplus @ 8.05.2016, 17:12:38 ) *
Więc jak zmieniło ci na wartość 0 to oznacza że symbol = symbol + '0' nie działa, do operacji na stringach służy właśnie CONCAT.

A zanim użyjesz, możesz sprawdzić czy rekord o symbolu z dodatkowym zerem istnieje. Jeżeli istnieje to może należy przemyśleć co chcesz zrobić, bo być może powinny być dodane dwa zera. A może jakaś specjalna sekwencja znaków.


Dziękuję (IMG:style_emoticons/default/smile.gif) CONCAT rozwiązało sprawę. Wcześniej źle zrozumiałem Twoją sugestię.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 07:52