Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Generowanie kodu
-Kinia-
post
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 :/
Go to the top of the page
+Quote Post
nospor
post
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)
Go to the top of the page
+Quote Post
-Kinia-
post
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
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 13:43