Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Najmniejsza niewystępująca liczba
-Gość-
post
Post #1





Goście







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ąć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
ciekawskiii
post
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

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


  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ł

Ten post edytował ciekawskiii 24.12.2011, 17:45:38
Go to the top of the page
+Quote Post
Adi32
post
Post #3





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Adi32 24.12.2011, 19:40:20
Go to the top of the page
+Quote Post
-Gość-
post
Post #4





Goście







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ć (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Adi32
post
Post #5





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

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


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

Ten post edytował ciekawskiii 24.12.2011, 22:16:20
Go to the top of the page
+Quote Post
olechafm
post
Post #7





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

Ostrzeżenie: (0%)
-----


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

Ten post edytował olechafm 24.12.2011, 22:20:56
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: 4.10.2025 - 13:21