Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Funkcja maxid działa niepoprawnie
Forum PHP.pl > Forum > Przedszkole
thomson89
Witam!
Natchniony, szybko napisałem sobie funkcję, która sprawdza (bynajmniej powinna) sprawdzić jakie jest największe id. Po kilku poprawkach parse errorów zobaczyłem ze funkcja działa. Niestety: podaje id o 2 większe niz jest maksymalne i nie wiem dlaczego. Np. w tabeli mamy 7 rekordów, a wd. funkcji jest ich 9. Na szczęście po kilku próbach zobaczyłem że jest to regularne. Dodałem id-2 i funkcja działa poprawnie.

Po kilku męczących chwilach doszedłem do wniosku ze nie wiem czym jest to spowodowane. Dlatego, proszę o pomoc:

  1. <?php
  2. function maxid($polaczenie, $serwer, $tabela, $nazwa = "id"){
  3.        
  4.        if($polaczenie == 'new'){
  5.            
  6.            //jak mamy otowrzyc nowe polaczenie, otwieramy je
  7.            $polaczenie = lacz($serwer);    
  8.        
  9.        }
  10.        else {
  11.            
  12.            //jak polaczenie bylo, sprawdzamy jego aktywnosc
  13.            $polaczenie = mysql_ping($polaczenie);
  14.            if(!$polaczenie)
  15.                $polaczenie = lacz($serwer);      
  16.            
  17.        }
  18.        
  19.        $numer_id = 1;
  20.        $zapytanie = "SELECT * FROM ".$tabela." WHERE ".$nazwa." = ".$numer_id;
  21.        $wynik = mysql_query($zapytanie);
  22.        $ilosc_wierszy = mysql_num_rows($wynik);
  23.        if($ilosc_wierszy < 1){
  24.            
  25.            $id = $numer_id;
  26.            return $id;
  27.        
  28.        }
  29.        else {
  30.        
  31.        
  32.            //glowne sprawdzenie maksymalnego id
  33.            while($ilosc_wierszy >= 1){
  34.                
  35.                $zapytanie = "SELECT * FROM ".$tabela." WHERE ".$nazwa." = ".$numer_id;
  36.                $wynik = mysql_query($zapytanie);
  37.                $ilosc_wierszy = mysql_num_rows($wynik);
  38.                $numer_id++;
  39.                
  40.            }
  41.            
  42.            $id = $numer_id-2;
  43.            return $id;
  44.        }
  45.        
  46.        
  47.        rozlacz($polaczenie);
  48. }
  49. ?>


Funckja korzysta z moich funkcji lacz() i rozlacz(). Lacz() ma duzo parametrów opcjonalnych, a tutaj wykorzystuję tylko zmienną do laczenia sie z odpowiednim serwerem. rozlacz() to po prostu mysql_close(). Na sam koniec przed return dałem -2.

Pozdrawiam!
blooregard
Wszystko możesz załatwić jednym zapytaniem SQL:
  1. SELECT MAX(id) FORM tabela WHERE warunki;
thomson89
No, ale to co się nauczyłeś przy pisaniu skryptów, wpoiłeś ipt. to dobrze.

Ale się zdziwiłem że to tak można załatwić: no a mój problem?
blooregard
Cytat
No, ale to co się nauczyłeś przy pisaniu skryptów, wpoiłeś ipt. to dobrze.

Tzn. JA się nauczyłem, czy Ty? smile.gif

Cytat
Ale się zdziwiłem że to tak można załatwić: no a mój problem?

No widzisz, a Twój problem? Słaba znajomość języka SQL (SQL to nie tylko SELECT, INSERT, UPDATE, DELETE, to także kupa różnych przydatnych f-cji, między innymi MAX(), do tego transakcje, triggery, procedury składowane, pozdapytania i ich wykorzystanie np. w klauzulach WHERE, złączenia itp. itd.)
Poucz się trochę SQL-a, a wiele problemów, takich jak ten powyżej, rozwiążesz już na poziomie zapytania do bazy, bez konieczności pisania zbędnych funkcji.
Na początek np. to przejrzyj: http://dev.mysql.com/doc/refman/5.1/en/
thomson89
No dobra. Dzięki.
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.