Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Najmniejsza niewystępująca liczba
Forum PHP.pl > Forum > Przedszkole
Gość
Witam

Chciałbym osiągnąć coś takiego, aby skrypt podawał mi najmniejszą możliwą liczbę, która nie występuje jeszcze w bazie.
Mógłbym zrobić to za pomocą dodania 1 do liczby maksymalnej, bo liczby te idą pokolei, ale jednak wolę się jakoś zabezpieczyć, bo jednak może się zdarzyć gdzieś luka np liczby w kolumnie numer idą od 1-79 i potem 81-178 i wtedy chcę, żeby wyświetliło mi liczbę 80

Jak mogę to osiągnąć?
ciekawskiii
  1. for($i=1; $i<=$ile_liczb; $i++)
  2. {
  3. if(!isset($i))
  4. {
  5. echo $a[$i]; //wszystkie liczby ktorych brak
  6. }
  7. }
  8. echo $a[1]; //to najmniejsza liczba której brak


tak bym to zrobił
Adi32
Zdaje mi się, że to nie rozwiązuje problemu. Co jak będzie 6 wpisów o numerach 21 22 23 25 26 27 ?
Myślę, że autor powinien podać więcej szczegółów.

Edit:
może tak:

  1. $a = tablica wszystkich liczb
  2.  
  3. for($i=$najmniejsza; $i<=$najwieksza; $i++) {
  4.  
  5. if(!in_array($i,$a)) {
  6.  
  7. echo $a[$i]; //wszystkie liczby ktorych brak
  8.  
  9. }
  10.  
  11. }
  12. echo $a[0]; //to najmniejsza liczba której brak


Jednak odnoszę nieodparte wrażenie, że taki problem jaki przedstawił autor nie powinien się pojawić... Myślę, że rozwiązania należałoby szukać wcześniej.
Gość
Cytat
Jednak odnoszę nieodparte wrażenie, że taki problem jaki przedstawił autor nie powinien się pojawić... Myślę, że rozwiązania należałoby szukać wcześniej.

Chodzi o to, że skrypt ma pobierać z bazy danych wszystkie liczby z kolumny Numer (to coś jak ID)
Załóżmy, że każdy rekord to nowy klient, kiedy ktoś nie jest klientem to usuwa się cały rekord z bazy i wtedy robi się luka. Chciałbym, żeby wtedy nowy rekord wszedł na miejsce tego usuniętego, aby luki nie było, dlatego potrzebna mi jest ta liczba, aby w formularzu dodawania rekordu automatycznie uzupełniało się pole ID.

Mam nadzieję, że teraz wiadomo o co mi chodzi i da się jakoś ten skrypt dostosować wink.gif
Adi32
W praktyce tak się nie robi, nie łata się żadnych luk, jaki w ogóle ma to cel?
W praktyce, dodaje się kolumnę 'usuniety' i daje się na true gdy usunięty.
ciekawskiii
Mój przykład pokaże Ci zawsze pierwszą wolną luke więc przed tym skryptem zrób zapytanie wyciągające id, w miejsce $ile_liczb wrzuc zmienna z iloscia rekordow z tego zapytania.

pozniej juz przy tworzeniu rekordu do inserta dodajesz id='$a[1]' i tyle

tylko jestem ciekawy po co niby tą pustą luke wypełniać?

co do posta wyżej. W sumie pierwszy raz o takim wypełnianiu słysze
olechafm
tak jak powiedzieli poprzednicy nie stosuje się takiego rozwiązania, pole to np. ID klienta powinno być auto incrementem w bazie i samo nadawać sobie numer, jeśli usuwasz danego klienta to nie zwalniasz jego ID dla innego bo to może ci przynieść w późniejszym terminie niepożądane skutki np. przejęcie jakichś specyficznych własności przez nowego klienta który wraz z ID odziedziczy je po starym

najlepsze rozwiązanie to dodanie pola do bazy, które będzie znacznikiem 0-1 czy dany rekord jest aktywnym czy nieaktywnym klientem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.