Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Pętla, liczby co dwa.
desavil
post
Post #1





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Witam.
Niestety to jest mój najsłabszy punkt w PHP - pętle.

W jaki sposób można zrobić, aby pętla wyświetlała dajny na to numery od 1000-2000 ale tylko parzyste, czyli: 1000, 1002, 1004, 1006 itp.
Dodatkowo każdy numer, aby był sprawdzany w bazie danych jeżeli jest w bazie danych to go nie wyświetla, jeżeli nie ma - wyświetla.

Pozdrawiam.

Ten post edytował desavil 8.05.2011, 08:18:16
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Ulysess
post
Post #2





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


for($lp=2000;$lp<=4000;++$lp)
{

if($lp%2 == 0)
{
// tutaj dajesz zapytanie mysql w którym w where wstawiasz LP , astpnie używasz mysql_num_rows i robisz warunek if mysql_num_rows > 0) echo $lp;
}



}
Go to the top of the page
+Quote Post
desavil
post
Post #3





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Dzięki, działa (IMG:style_emoticons/default/smile.gif)


PS. W zapytaniu SQL zamiast > 0 należy użyć <= 0
Go to the top of the page
+Quote Post
Ulysess
post
Post #4





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


fakt sory,, moj oznaczał większe od 0 czyli istnieje a tutaj chodziło że nie istnieje (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Taaa... I robisz kilka tysięcy zapytań do bazy niepotrzebnie. Wygeneruj sobie jedynie liczby parzyste od x do y i wyślij je w zapytaniu jako WHERE ... IN (...) lub pokombinuj po stronie bazy z zapytaniem używającym BETWEEN i MOD()
Go to the top of the page
+Quote Post
lobopol
post
Post #6





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Pomijam fakt, że w tym momencie siekniesz tylko 500 zapytań do bazy przy jednym wykonaniu skryptu. No i druga rzecz wykonasz o dwa razy za dużo przejść pętli:
  1. $i=1000;
  2. while($i<2000){
  3. echo $i;
  4. $i +=2;
  5. }

przy czymś takim pokusiłbym się o coś na zasadzie:
  1. $aId = range(1000,2000,2); //zapełnienie tablicy id parzystymi
  2. $sql = 'select id from users where id in('.implode(',',$aId).')'; //zapytanie wyciągające wszystkie id
  3. mysql_connect('localhost', 'root', '');
  4. mysql_select_db('nazwa_bazy');
  5. $result = mysql_query($sql);
  6.  
  7. while($row = mysql_fetch_assoc($result)) { //od 0 do 500 przejść zależnie od ilości w bazie
  8. if(in_array($row['id'], $aId)){
  9. unset($aId[(floor($row['id']-1000)/2)]); //tak wiem zarąbiste usuwanie klucza (IMG:style_emoticons/default/tongue.gif)
  10. }
  11. }
  12. if(!empty($aId)){ //czy przypdakiem nie zostały wszystkie usunięte i nie ma nic do wyświetlenia
  13. foreach($aId as $value){ //od jednego do 500 przejść
  14. echo $value;
  15. }
  16. }
  17.  


To takie rozwiązanie na szybko, znacznie wydajniejsze
Go to the top of the page
+Quote Post
tehaha
post
Post #7





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


wystarczy jedno proste zapytanie:
  1. SELECT id FROM tabela WHERE id> 1000 AND id < 1000 AND MOD(id,2) = 0


Ten post edytował tehaha 8.05.2011, 14:42:05
Go to the top of the page
+Quote Post
thek
post
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Tehaha... Czyli dokładnie to co ja napisałem kilka postów wyżej słownie, tyle że zamiast dwóch warunków zasugerowałem BETWEEN (IMG:style_emoticons/default/wink.gif)
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: 2.04.2026 - 18:37