![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
Witam serdecznie,
Chciałbym prosić o pomoc w optymalizacji poniższego skryptu:
Skrypt ma działać w następujący sposób: 1. sprawdzić czy dany rekord już istnieje w bazie 2. sprawdzić czy kategoria jest już w bazie - jeśli nie, to dopisać 3. sprawdzić czy podkategoria jest już w bazie - jeśli nie, to dopisać 4. jeśli produktu nie ma w bazie - to go dopisujemy.... Skrypt działa... Ale prawdopodobnie da się go bardzo zoptymalizować pod względem wydajności.... ![]() Czy mógłbym prosić o pomoc? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście, że się da. Niepotrzebnie jest tylko select-ów. Zamiast odpytywać ciąglę bazę danych czy istnieje dany produkt, czy też kategoria możesz zrobić tablice, w której będziesz trzymał potrzebne informacje.
Przykładowo tworzysz tablice: w której bedziesz trzymał numery ISBN i zamiast sprawdzać czy produkt istnieje w bazie możesz sprawdzać przy pomocy funkci in_array. Jeśli nie ma to dodajesz, nowy produkt i na końcu dopisujesz nowy numer do tablicy. W przypadku kategorii sytuacja będzie trochę inna bo potrzebne jest jej id, ale to też nie jest duży problem. Tworzysz tablice: gdzie kluczem będzie jej nazwa, a wartością jej identyfikator z bazy danych. Przy sprawdzaniu wystarczy użyć funkcji array_key_exists. Jeśli klucz istnieje pobierasz numer id, jeśli nie dodajesz nową kategorie do bazy oraz do tablicy. Odnośnie pobierania numeru id nowo dodanej kategorii to służy do tego funkcja mysql_insert_id. Ten sam mechanizm tyczy się podkategorii. -------------------- Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.
https://www.aroch.pl https://themeforest.net/user/aroch https://www.astroblog.aroch.pl https://www.4geeks.pl |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
mógłbym prosić o przykład jak to zrobić?
![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przykład dla produku:
Dla kategorii i podkategorii:
Podobnie należy zrobić dla podkategorii, tzn stworzyć odpowiednią zmienną, w której będą przechowywane identyfikatory i dodać kod w odpowiednim miejscu. Ten post edytował freemp3 26.07.2013, 14:57:50 -------------------- Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.
https://www.aroch.pl https://themeforest.net/user/aroch https://www.astroblog.aroch.pl https://www.4geeks.pl |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
tylko powyższy kod nie weryfikuje, czy w poszczególnych tabelach w bazie danych są już te rekordy...
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Zakładałem, że dane są importowane do pustej bazy. Jeśli masz coś już w bazie to możesz zrobić sprawdzanie najpierw w tablicach tak jak opisałem powyżej, jeśli w nich nie będzie to sprawdzasz w bazie. Jeśli dany produkt czy kategoria jest w bazie dodajesz do tablicy i następnym razem nie będzie konieczności sprawdzania w bazie.
-------------------- Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.
https://www.aroch.pl https://themeforest.net/user/aroch https://www.astroblog.aroch.pl https://www.4geeks.pl |
|
|
-north- |
![]()
Post
#7
|
Goście ![]() |
import właśnie niestety do pełnej bazy
![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%) ![]() ![]() |
W takim razie zostaje sprawdzanie tak jak napisałem powyżej. Najpierw sprawdzaj tablice, a później dopiero w bazie danych.
Jeszcze ten warunek możesz poprawić: Kod if ($data['1'] != "") Skoro wartość jest pusta i całe dodawanie jest pomijane to poniższy kod jest bezcelowy: Kod $result = mysql_query("SELECT * FROM cms_produkty WHERE isbn = '$data[1]';", $connection); $ilosc_wierszy = mysql_num_rows($result); Powinien się on znaleźć już po tym warunki kiedy wiadomo, że jest sens sprawdzania czy produkt już istnieje, a nie przed nim. Zyskujesz w tedy trochę cennego czasu na każde przejście pętli i przy dużych importach jest to widoczne. -------------------- Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.
https://www.aroch.pl https://themeforest.net/user/aroch https://www.astroblog.aroch.pl https://www.4geeks.pl |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nic nie trzeba sprawdzać. Od tego jest indeks UNIQUE w bazie danych (+ ON DUPLICATE KEY ... w insertach).
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 10.07.2025 - 11:10 |