Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Jak wyzerować pozycję wskaźnika tablicy
Forum PHP.pl > Forum > Przedszkole
Jarod
Mam mały problem. Przed właściwym pobraniem z bazy danych, najpierw sprawdzałem czy są jakieś rekordy w następujący sposób:
  1. $result = mysql_query('SELECT COUNT(rejs_id) FROM rejs WHERE data=''.$biezacaData.'' AND kierunek='o'') OR die ('Zapytanie nieudane!');
  2. $query_data = mysql_fetch_row($result);
  3.  
  4. IF ( $query_data > 0 )
  5. {
  6.  
  7. }
  8. else
  9. {
  10.  
  11. }


Doszedłem do wniosku, że wzrośnie szybkość wykonywania skryptu jeśli od razu pobiorę interesujące wiersze i sprawdzę czy wynik jest większy > 0.

  1. $result = mysql_query('...jakieś zapytanie') OR die ('Zapytanie nieudane!');
  2. $query_data = mysql_fetch_row($result);
  3.  
  4. while ($query_data = mysql_fetch_row($result))
  5. {
  6. ...
  7. ...
  8. //wyśiwtlanie danych na ekranie
  9. ...
  10. ...
  11. }


Z tym że w pętli jest jeden rekord mniej, bo już jeden pobrałem, żeby sprawdzić czy zapytanie zwróciło wynik (tym samym czy są szukane dane w bazie).

PYTANIE: Czy jest jakaś funkcja podobna do reset(), którą można zastosować w tym przypadku?
reset(mysql_fetch_row($result)); generuje warninga..
KG-
Możesz wykonać ponowne zapytanie albo pobierz rekordy i dołącz do tablicy ten pierwszy. Można to zrobić na kilka sposobów, np:

  1. <?php
  2. $query_data_f = mysql_fetch_row($result);
  3. $query_data = array();
  4. while ($query_data[] = mysql_fetch_row($result));
  5.  
  6. $query_data[] = $query_data_f;
  7. foreach ($query_data as $q) {
  8. // costam wyswietlamy
  9. }
  10. ?>
kamikaze_
Imo nie potrzebnie sprawdzasz liczbe rekordów. Potem masz while, który je wyświetli jeśli będą. Jeśli nie będzie to nie wyświetli.
Jarod
Cytat(kamikaze_ @ 30.07.2006, 17:46 ) *
Imo nie potrzebnie sprawdzasz liczbe rekordów. Potem masz while, który je wyświetli jeśli będą. Jeśli nie będzie to nie wyświetli.


Chcę zrobić tak, że jeśli są rekordy to je wyświetlamy. Jeśli nie to wypluwamy komunikat, że nie znaleziono rekordów.

Problem rozwiązałem poprzez usunięcie zapytania
  1. SELECT COUNT(*) ...

a dodanie czegoś takiego:
  1. <?php
  2. if ( mysql_num_rows($result) > 0 )
  3. {
  4. ...
  5. ...
  6. }
  7. ?>

---------


Do wyświetlania rekordów używam
  1. <?php
  2. while ( $query_data = mysql_fetch_row($result) )
  3. {
  4. ...
  5. }
  6. ?>


Czy można pobierać rekordy ale nie za pomocą while tylko odrazu foreach? While jest strasznie wolny przy pobieraniu np 60 pozycji i jeszcze obróbce (bo w pętli każdy wiersz jeszcze przygotowje do wyśiwetlenia - wstawiam w divy z różnymi stylami).
NuLL
Foreachem moglbys - ale wynik musialbys napierw przerzucic do tablicy albo stworzyc iterator przedstawiajacy obiekt wyniku zapytania winksmiley.jpg
Jarod
Cytat(NuLL @ 1.08.2006, 02:42 ) *
Foreachem moglbys - ale wynik musialbys napierw przerzucic do tablicy


Odpada. Dwa razy robię to samo, żeby przelecieć foreach.

Cytat(NuLL @ 1.08.2006, 02:42 ) *
albo stworzyc iterator przedstawiajacy obiekt wyniku zapytania winksmiley.jpg


To jakiś wzorzec?
mike
Cytat(J4r0d @ 1.08.2006, 11:15 ) *
To jakiś wzorzec?

Standard php Library (SPL) Functions
Jarod
Cytat(mike_mech @ 1.08.2006, 09:16 ) *


Można prosić prosty przykład interatora?
mike
Cytat(J4r0d @ 1.08.2006, 11:19 ) *
Można prosić prosty przykład interatora?
(w zasadzie to ten sam iterator, tylko przykłady lekko inne)
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.