![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Importuję dane z pliku csv do bazy danych. Skrypt wygląda tak:
Skrypt działa bardzo dobrze. Chciałbym żeby rekordy które wgrywam o jakimś ID zastępowały rekordy które są już w bazie z takim samym ID. Ten post edytował Cromwell 30.11.2009, 16:12:11 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 142 Pomógł: 32 Dołączył: 21.08.2008 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
W takim razie powinno Ci pomóc INSERT ... ON DUPLICATE KEY UPDATE.
Ten post edytował jasin 30.11.2009, 16:24:51 -------------------- ![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ok, przeczytałem fragment w manualu i albo ja tego nie rozumiem, albo nie o to mi chodzi.
Z tego co wywnioskowałem, dzięki temu poleceniu mogę zmienić określone dane, aby rekordy nie były takie same. A mi chodzi o to, żeby w przypadku takiego samego ID, nowy rekord nadpisywał stary. Nie wiem, pewnie coś źle rozumiem. Zmieniłem w kodzie tak:
I nie działa. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 142 Pomógł: 32 Dołączył: 21.08.2008 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Ok. Zawsze możesz zrobić zapytanie:
i jeśli to zapytanie zwróci zero zaktualizowanych rekordów to robisz INSERT. -------------------- ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wprowadziłem zmiany:
Jednak efekt jest ten sam - dodaje wszystkie rekordy raz jeszcze.. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 142 Pomógł: 32 Dołączył: 21.08.2008 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o mysql_affected_rows.
Powinno u Ciebie wyglądać to jakoś tak:
Ten post edytował jasin 30.11.2009, 20:05:10 -------------------- ![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Po wprowadzeniu zmian, nic się nie dodaje..
Aby zobaczyć, gdzie jest błąd, zmieniłem na:
Teraz dostaję komunikat Cytat 1You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near Zastanawia mnie to, ponieważ danych, które są wczytywane nie zmieniałem, tak jak wyglądały tak dalej wyglądają, więc to nie z nimi problem. Składnia zapytania.. wydaje mi się, że jest dobrze. Nie wiem w sumie, gdzie teraz jest błąd. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
wyprintuj całe zapytanie
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ok, całe zapytanie wygląda tak:
Zmieniłem w nim wartości na liczby, gdyż po prostu nie mogę ich pokazać publicznie (wewnątrz zapytania po przecinkach dodałem jeszcze dwie spacje, aby się ładnie wyświetliło tutaj). Same wartości na pewno wchodzą do bazy dobrze, gdyż skryptem, który umieściłem w pierwszym poście dodawałem dokładnie te same rekordy. Zapytanie ma prawo się nie wykonać, jeśli w bazie danych nie ma danego rekordu. Jednak wtedy skrypt powinien zejść niżej i wykonać to drugie. To, które jest identyczne jak to z pierwszego postu. Może chodzi o to, że jeśli skrypt nie wykona zapytania, to już dalej nie robi tylko raz jeszcze zaczyna od foreach z nową wartością? EDIT Jak usunąłem fragment, który informował o błędzie w pierwszym zapytaniu, wtedy skrypt niby cały poszedł, dostałem info, że rekordy zostały dodane poprawnie, jednak w bazie ich nie ma. Ten post edytował Cromwell 1.12.2009, 12:07:48 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Wyrzuć warunek where
Ten post edytował darko 1.12.2009, 12:08:53 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zmieniłem na:
I dalej to samo. Zapytanie nie przechodzi, ale myślę, że to dlatego, bo w bazie danych nie ma rekordu z taką liczbą lp. Tylko że w takim wypadku skrypt powinien iść dalej, wykonać zapytanie INSERT INTO, a tego nie robi.. @darko, bez warunku WHERE dalej nie idzie.. Ten post edytował Cromwell 1.12.2009, 12:29:53 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
W moim ostatnim poście napisałem: Wyrzuć warunek where, a widzę, że dalej jest...
Nie myślałeś o tym, żeby użyć REPLACE ![]() -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zmieniłeś post po tym, jak ja napisałem swój.
Wyrzuciłem i dodałem część postu od "@darko, bez warunku". A co do REPLACE - szczerze mówiąc, nie wiem jak sensownie zbudować wyrażenie używając REPLACE. Żeby jeśli rekord z takim LP już jest w bazie tylko podmieniało, a jeśli nie ma, to wstawiało nowy. |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted To chyba wszystko mówi, na przykład:
to dokładnie spełnia swoją rolę, sprawdziłem na przykładowej tabeli. -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Działa idealnie
![]() Początkowo nie zrozumiałem dokładnie REPLACE (chociaż używałem go już kiedyś), bo szukałem jeszcze w google dla pewności różnych zastosowań i trafiłem na kilka bardzo rozbudowanych przykładów. Wielkie, wielkie dzięki ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 1.07.2025 - 03:55 |