![]() |
![]() ![]() |
![]() |
-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: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Po pierwsze:
tak jak to tu przedstawiłeś, to jest to totalnie bezsensu. Skoro zawsze to ma być aa-ITUKOLEJNE, to zrób poprostu pole ID autoincrement, które samo automatycznie będzie się zwiększać o 1 i będziesz miał to co chcesz. Jak ci będzie zależało na aa-.... to poprostu potem na podstawie ID będziesz te aa-.... budował Po drugie: e, tu napiszę, jak ustosunkujesz się do po pierwsze (IMG:style_emoticons/default/wink.gif) |
|
|
-Kinia- |
![]()
Post
#3
|
Goście ![]() |
No jest troche namieszane, w kazdym razie chodzi o to ze jest kilka kategorii tych produktow i rozne kilka kategorii oznaczen np: as-0001 albo az-0032
czyli chce zeby sprawdzilo (np w przypadku az-...) czyli zeby sprawdzil az-0001,az-0002,az-0003,az-0004,az-0005,az-0006,az-0007,az-0008,az-0009,az-0010 ... i zeby sprawdzal az bedzie wolne bo np. moze byc tez przerwa: az-0001, az-0002 az-0004 - I W TYM PRZYPADKU ZEBY WYGENEROWAL az-0003 |
|
|
![]()
Post
#4
|
|
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: 24.08.2025 - 13:43 |