![]() |
![]() |
-Kinia- |
![]()
Post
#1
|
Goście ![]() |
Glowie sie od kilku godzin, niby prosty kod do napisania a niby cos zle robie.
Mam baze danych w ktorej sa np. produkty i kazdy produkt ma kod swoj (ida po kolei) np. aa-0001, aa-0002, aa-0003, ... aa-0123 i teraz wlasnie chce zrobic generator takiego kodu (czyli by znalazl kolejny wolny) - zapewne ktos mysli - a nie latwiej zrobic zeby policzyl wszystkie i dodal kolejny - NIE koniecznie musi byc kolejny - przedstawie moj tok myslenia - moze robie cos zle no ale ... 1. LACZENIE SIE Z BAZA DANYCH (host, login, passwor) - wiadomo 2. zmienne na poczatku $a = "aa-" $b = "0000"; $ab = $a.$b; 3. Wyszukaj $ab w bazie danych w kolumnie kod 4. Policz wynik (mysql_num_rows) 5. Jesli wynik 0 - czyli aa-0000 JEST WOLNY 6. Ale jesli nie - I TU NIE WIEM CZY MOGE TAK ZROBIC - ZASTOSOWAC WHILE $nowy_b = 2; $istnienie = 1 i tu zaczyna sie while policz z ilu znakow sklada sie $nowy_b (z uzyciem strlen() ) to nam powie czy nowy_b sklada jest o 2-9 czy od 10 do 99 czy od 100 do 999 czy od 1000 do 9999 - to nam potrzebne do tego zebysmy wiedzieli ile wstawic zer przed kodem do wyszukania tutaj switcha albo if do wygenerowania calego kodu czyli np (jak $new_b = 3 czyli ma jeden znak: $nowy_kod = $a."000".$new_b czyli na wyjsciu mamy np. aa-0003 tu select - czyli sprawdz w kolumnie kod czy jest taki aa-0003 policz znalezienie i powtarza petle az znalezienie bedzie 0 (IMG:style_emoticons/default/smile.gif) MAM NADZIEJE ZE ROZUMIECIE cos z tego i bedzie Wam sie chcial to przenalizowac NIBY LATWE ALE JEDNAK COS NIE TAK :/ |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Takie identyfikatory źle się indeksują.
Lepiej stwórz tabele gdzie będziesz miał kategorie (AA, AB, ... ZZ) przetłumaczone na cyferki (10, 11, ... 99), doczep je do identyfikatora produktu z przodu.. Otrzymasz identyfikator produktu w stylu 990001. Potem chcąc dodać kolejny element: 1. otwierasz transakcje na tabeli (lub calej bazie zalezy od silnika) 2. szukasz idntyfikatora produktu wiekszego od 990000 lecz mniejszego od 999999 sortujesz od najwiekszego, limit 1 (zaindeksowane wykona się błyskawicznie) 3. do wyniku dodajesz 1 i tworzysz kolejny rekord w tabli produktow 4. zamykasz transakcje Auto-icrement też działa poniekąd na transakcjach tyle że lepiej zoptymalizowanych, więc whatever ;p To co opisałem jest z pewnością krokiem w dobrym kierunku. Da się dużo, dużo lepiej, niestety podałeś zbyt mało informacji żeby dobrać idelne rozwiązanie ;p Ten post edytował wNogachSpisz 8.11.2011, 15:49:57 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 11:56 |