Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Jak wyzerować pozycję wskaźnika tablicy
Jarod
post 30.07.2006, 18:23:46
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


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..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KG-
post 30.07.2006, 18:44:28
Post #2





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 30.05.2006

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


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. ?>
Go to the top of the page
+Quote Post
kamikaze_
post 30.07.2006, 18:46:02
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.05.2006

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


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.
Go to the top of the page
+Quote Post
Jarod
post 31.07.2006, 22:59:33
Post #4





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


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).


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
NuLL
post 1.08.2006, 03:42:27
Post #5





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Foreachem moglbys - ale wynik musialbys napierw przerzucic do tablicy albo stworzyc iterator przedstawiajacy obiekt wyniku zapytania winksmiley.jpg


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Jarod
post 1.08.2006, 10:15:12
Post #6





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


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?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
mike
post 1.08.2006, 10:16:41
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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

Standard php Library (SPL) Functions
Go to the top of the page
+Quote Post
Jarod
post 1.08.2006, 10:19:03
Post #8





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(mike_mech @ 1.08.2006, 09:16 ) *


Można prosić prosty przykład interatora?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
mike
post 1.08.2006, 11:01:42
Post #9





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 04:23