![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam,
napotkałem problem przy imporcie danych. Otóż załóżmy, że mam tabelę: Id | kod kreskowy | Cena Raz na jakiś czas muszę pobrać dane z innej bazy i zapisać je w tej tabeli. Problem w tym, że w tej tabeli jest pole 'kodKreskowy', które nie występuje w drugiej bazie danych. Dlatego też chciałbym aby podczas importowania danych w to pole wstawiała się wartość domyślna jeśli dany rekord nie istniał wcześnie w tabeli lub jeśli rekord już istniał aby kod kreskowy się nie zmieniał (inaczej mówiąc nie był usuwany) Zatem mam pytanie czy istnieje możliwość takiego skonstruowania zapytania, aby osiągnąć ten cel. Dodam, że tabela z której importuje dane może zawierać rekordy które nie występują w mojej bazie danych, więc zwykły update odpada. Próbowałem zrobić to za pomocą Replace bez podawania pola "kodKreskowy" ale wtedy wstawia się zawsze wartość domyślna, nawet jeśli pole zawierało kod kreskowy. Będę wdzięczny za pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
hehe no właśnie chodzi o coś zupełnie odwrotnego.
Pobieram dane z innej bazy: i potem jeśli wiersz nie istnieje w mojej tabeli to go wstawiam jeśli wiersz istnieje w mojej tabeli, to robie update wszystkich pól poza "kodKreskowy" - kody kreskowe mam zapisane tylko w mojej tabeli i nie chcę aby po każdym updacie cen itp. kody były wymazywane. Na razie jedyne co mi przyszło do głowy to sprawdzanie czy dany wiersz istnieje w bazie i w zależnoci od tego czy istnieje czy nie wywoływać Insert lub update - ale to jest ogromna ilość zapytań, więc pewnie da sie lepiej. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Na razie jedyne co mi przyszło do głowy to sprawdzanie czy dany wiersz istnieje w bazie i w zależnoci od tego czy istnieje czy nie wywoływać Insert lub update - ale to jest ogromna ilość zapytań, więc pewnie da sie lepiej. Czy każdy istniejący w twojej bazie wiersz zawiera pole kod_kreskowy, które przy updejcie ma być nie ruszane? Jeżeli tak, to: 1. pobierasz wszystkie dane ze swojej bazy. 2. na podstawie tych pobranych danych dzielisz nowe dane na te do dodania i te do zaktualizowania 3. dla tych do dodania - INSERT, dla tych do zaktualizowania - UPDATE Z pewnością musisz pobrać jednorazowo sporo danych, ale i tak chyba będzie to szybsze niż zapytanie istnienie każdego kolejnego wpisu. pozdr. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, to na pewno jest usprawnienie... Czemu o tym sam nie pomyślałem? - chyba kawy za mało :-)
Czyli w SQL nie ma zapytania, które załatwiłoby wszystko samo? Miałem nadzieje, że wystarczy gdzieś flagi poustawiać i wszystko pójdzie - no ale cóż, trzeba sie barć do pisania. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Hm, czy samo MySQL może coś zdziałać - tego niestety nie wiem :/
Być może warto zerknąć tu: INSERT ... ON DUPLICATE KEY UPDATE Syntax Niestety też do końca nie wiem czy to jest coś co rozwiąże twój problem. Nigdy nie korzystałem, a wpadło w oko w dokumentacji. pozdr. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Muszę sie temu przyjrzeć - ale wygląda na to czego szukam ;-)
Jeszcze raz dzięki za pomoc |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 03:37 |