![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
Dzień dobry,
Jestem amatorem coś od czasu do czasu piszę sobie do pracy by ułatwić sobie życie. Mam taki problem. Otwieram plik w którym są dane janek@wp.pl,3213123,344444 waldek@wp.pl,1221,2122123 karolek@wp.pl,1221,2122123 Odczytuję dane z pliku tak:
Bazę danych mam w sqlite3. Teraz chciałbym sprawdzić czy coś się zmieniło w cyfrach jeśli adres zgadza się z adresem w bazie danych. Jeśli nie ma takiego adresu, ma dodać nowy rekord do bazy (email i te dwie kolumny z cyframi). Problem mam taki, że nie umiem wpleść odczytania danych z pliku i sprawdzeniu ich czy są w bazie, w jednym zapytaniu while. Nie wiem czy to jest możliwe. Plik będzie się zmieniał co 2h, i chciałem sobie takie narzędzie zrobić. Może to i proste, ale jakoś nie mogę sobie z tym poradzić. Dziękuję za pomoc i wyrozumiałość PiotrekR -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Teraz chciałbym sprawdzić czy coś się zmieniło w cyfrach jeśli adres zgadza się z adresem w bazie danych. Jeśli nie ma takiego adresu, ma dodać nowy rekord do bazy (email i te dwie kolumny z cyframi). To co chcesz sprawdzać, cyfry czy adres? Tzn. dodać nowy rekord nawet z takim samym adresem jeśli cyfry się zmieniły, czy dodać rekord jeśli jeszcze nie ma takiego adresu email? -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
jeśli adres istnieje zaktualizuje tylko liczby, jeśli adresu nie ma doda cały nowy rekord z tym adresem
-------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
https://www.sqlite.org/lang_UPSERT.html
Musi być założony indeks unikalny na pole email. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
ja mam id jako pole unikalne,
ale chodzi o to jak w jednej pętli sprawdzić czy taki adres jest w bazie, czy to znaczy że mam zrobić dwie pętle ? -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A czemu chcesz to sprawdzać w pętli?
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
bo plik ma po 1000 wpisów.
Ja to tak wymyśliłem Baza pusta dostaję plik wchodzę na stronę i zaczyna się sprawdzanie pliku z bazą. Pierwszy wiersz pliku jest w bazie ? opcja 1: nie ma dodaję wpisy opcja 2: jest adres aktualizuję tylko cyfry. Po skończeniu pliku usuwam. Tak mi się wydaje że do tego powinna być pętla, żeby zawsze wszystkie linijki z pliku sprawdzić. Może można inaczej, ale nie wiem jak ![]() Ten post edytował redelek 23.11.2018, 22:02:37 -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Podałem Ci wyżej rozwiązanie.
Powinieneś użyć UPSERT. -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
wywala mi błąd jak robię tak zapytanie
Kod Warning: SQLite3::query(): Unable to prepare statement: 1, near "ON": syntax error in /Users/predel/Sites/TESTY_IBD/muser/file.php on line 87 Warning: SQLite3::query(): Unable to prepare statement: 1, near "ON": syntax error in /Users/predel/Sites/file.php on line 87 Warning: SQLite3::query(): Unable to prepare statement: 1, near "ON": syntax error in /Users/predel/Sites/file.php on line 87 Warning: SQLite3::query(): Unable to prepare statement: 1, near "ON": syntax error in /Users/predel/Sites/file.php on line 87 Co robię nie tak? Ten post edytował redelek 24.11.2018, 21:10:52 -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Którą wersję SQLite masz zainstalowaną?
-------------------- |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
3.23.1
-------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A w linku, który podałem:
Cytat UPSERT syntax was added to SQLite with version 3.24.0 (2018-06-04).
-------------------- |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
działa działa, ale musiałem wywalić xampp bo miał wersję 3.7(wcześniej podałem Ci wersję systemową) i zrobić wszystko samemu, teraz mam sqlite3.25 php 7.2 i działa jak złoto.
DZIĘKUJĘ ZA POMOC -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Przy niedużym wsadzie pętli while możesz użyć tylko do zbudowania listy wartości jaką trzeba aktualizować, a samą aktualizację przeprowadzić jednym UPSERT.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 03:53 |