Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Wyszukanie brakujących liczb z pewnego zakresu
Forum PHP.pl > Forum > Przedszkole
novaczek
sytuacja wyglada nastepujaco
w tabeli 'osoby' jest pole 'nr_lic'
obecnie 'nr_lic' ma wartości od 1001 do 1900 (wartosci beda rosly) ale niestety w tym przedziale brakuje kilkunastu liczb
Szukam sposobu na wyswietlenie właśnie tych brakujących liczb
Cysiaczek
Chodzi Ci o wyswietlenie TYLKO tych brakujacych liczb, czy po prostu wszystkiuch liczb. Podaj kontkekst, bo mam jeszcze jedną interpretację w zanadrzu.
novaczek
Chodzi tylko o brakujące liczby
Cysiaczek
Dobra. spróbujemy w ten deseń:

Zakładam, że dobrze zrozumiałem, że masz te liczby w osobnych rekordach.

To tylko fragment algorytmu - coś spaprałem i musze przemyślec ...
  1. <?php
  2.  
  3. $i=1001; //na chama dajemy integer
  4.  
  5. $start=$i+1; //dla pierwszego przebiegu petli
  6. $stan=0;
  7.  
  8. while ($result=mysql_fetch_array($query)){
  9.  
  10. if ($stan==0){
  11. $stan=1;
  12. $i=$start;
  13. }
  14.  
  15. // $result[0] to twoja liczba ok?
  16. if ($result[0] - 1 == $i){//nic nie rób}
  17. else {
  18. print $result[0];
  19. }
  20.  
  21. $i=$result[0];
  22.  
  23. }
  24. ?>


Wogóle to zamotałem ...
novaczek
smile.gif
oczywiscie te liczby sa w odzielnych rekordach
Cysiaczek
Powyższe powinno działac - ewentualnie troszkę przeróbek sobie dokonasz smile.gif

Znalazłem BUGA - dla pierwszego rekordu nie zadziała :|
novaczek
no wlasnie apropo przerobek.... ja powinienem byc chyba w zlobku:)
jak podpiac skrypt do mojej tabeli?? (tam sa tez inne kolumny oczywiscvie)
Cysiaczek
teraz powinno działac - nie jest to oczywiście piekny kod, ale ujdzie w tłoku.

Nie musisz podinać do tabeli. Chyba masz jakiś kod, który przetwarza dane prawda?
novaczek
no wlasnie to mialby byc oddzielny, niezalezny skrypt informacyjny tylko dla mnie, nie wpiety nigdzie (oczywiscie z conectem do bazy)... ale z selectem nie bedzie problemu (chyba)

wyskakuje jakis blad w lini z else

czy takie zapytanie jest OK?
  1. $query = mysql_query("SELECT os_lic FROM `wnba_osoby` ");
Cysiaczek
Raczej tak.
novaczek
to jesli tak to wyskakuje blad parsera dla lini 17 w Twoim skrypcie... u mnie 21 bo jeszcze dodany conect

http://www.wnba.pl/baza/info_brakujace_lic.php

a kod wyglada tak:
  1. <? include ('connect.php');
  2.  
  3. ?>
  4. <?php
  5. $query = mysql_query("SELECT MAX(os_lic) FROM `wnba_osoby` ");
  6.  
  7. $i=1001; //na chama dajemy integer
  8.  
  9. $start=$i+1; //dla pierwszego przebiegu petli
  10. $stan=0;
  11.  
  12. while ($result=mysql_fetch_array($query)){
  13.  
  14. if ($stan==0){
  15. $stan=1;
  16. $i=$start;
  17. }
  18.  
  19. // $result[0] to twoja liczba ok?
  20. if ($result[0] - 1 == $i){//nic nie rób}
  21. else {
  22. print $result[0];
  23. }
  24.  
  25. $i=$result[0];
  26.  
  27. }
  28. ?>
Cysiaczek
linia No 20 przenies '}' do nastepnej linii - ja podaję rozwiązanie - jak pojawią się będy parsera, to chyba umiesz sobie poradzić?
novaczek
OK... Pięknie działa tylko trzeba wprowadzić małą poprawkę



bo inaczej wyswietla wartosci ktore sa tuz po "pustej" wartosci czyli np. 1219 zamiast 1218
Jeszcze jedno. Tabela musi być posortowana rosnąco wg pola w którym szukamy "dziur"

I mały problem. Wyświetla się tez wartość startowa czyli 1000 - jak się jej pozbyc

Po kilku testach okazało się że skrypt działa poprawnie w tej postaci

  1. <?php
  2. $query = mysql_query("SELECT os_lic FROM `wnba_osoby` WHERE `os_lic` >= 200 ORDER BY `os_lic` ASC");
  3.  
  4. while ($result=mysql_fetch_array($query))
  5. {
  6.  
  7.  
  8. if ($result[0] - 1 == $i){
  9. }//nic nie rób
  10. else {
  11.  
  12. echo (($result[0] - 1).' ');
  13. }
  14.  
  15. $i=$result[0];
  16.  
  17. };
  18.  
  19. ?>
Cysiaczek
No to ustaw ta wartość tak jak podałem - algorytm działał na pewno. Teraz widzę, że nieco zmieniłeś. Jak zaczynasz od liczby 1000, to musisz ustawić starter na 1001 (był ustawiony).
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.