![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Tak jak w temacie, muszę prześwietlić folder który mam na dysku, znaleść pliki których jeszcze nie ma w MySQLu i dodać je do bazy. Do tego pierwszego znalazłem taka pętlę:
Obawiam się jednak, ze w przypadku wielu setek plików to rozwiązanie może być zbyt mocno obciążające. Dlatego wpadłem na pomysł, żeby do drugiej tablicy pobrać wszystkie nazwy plików któe mam w MySQLu i porównać je funkcją taką jak ta: http://php.net/manual/pl/function.array-diff-uassoc.php Niestety nie pokazuje to równic, twierdzi, że żadne elementy w tych tablicach się nie pokrywają. Czy ktoś z Was ma pomysł, jak to rozwiązać? Z góry dzięki! |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jeśli w folderze będziesz miał dużo plików to może Ci braknąć pamięci na array_diff. A gdybyś tak założył UNIQUE na nazwe pliku w MySQL i robil INSERT IGNORE po np 50 plikow na raz?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Myślisz, że to będzie mniej zasobożerne niż porównywanie dwóch arrayów?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zależy dla ilu plików (IMG:style_emoticons/default/tongue.gif) Ale w przypadku mojego rozwiązania ogranicza Cię jedynie czas wykonania skryptu, pamięć nie zostanie przekroczona przy odpowiednim ustawieniu wielkości paczki do zapisu.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Przy obecnych 50 plikach nie byłoby to problemem, tym bardziej ze rocznie pojawia się ich ok. 250. Jedyny kłopot to taki, że INSERT IGNORE inkrementuje mi id. Wykonałem skrypt dwa razy, dodało jeden rekord a id mam 114 przy czym ostatnim prawidłowym id był 36. Nie podoba mi się to rozwiązanie. W razie czego podaje fragment kodu bo może coś skopałem:
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mozesz zmienic IGNORE na INSERT ... ON DUPLICATE KEY UPDATE id=id
Cytat If you use INSERT IGNORE and the row is ignored, the LAST_INSERT_ID() remains unchanged from the current value (or 0 is returned if the connection has not yet performed a successful INSERT) and, for non-transactional tables, the AUTO_INCREMENT counter is not incremented. For InnoDB tables, the AUTO_INCREMENT counter is incremented if innodb_autoinc_lock_mode is set to 1 or 2
Ten post edytował kapslokk 28.09.2016, 08:37:29 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zmieniłem, wykonałem, mam nowe id=153
Finalnie zostawiłem taki kod:
Ten post edytował KR2615 28.09.2016, 08:59:26 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
U mnie dziala normalnie cos takiego. max(id) po wykonaniu powyzszego kodu = 4. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 19:06 |