Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pętla-'dynamiczne zmienne'
My4tic
post
Post #1





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Jak zapisać taki kod w pętli:

  1. <?php
  2.  
  3. $aSQL = "SELECT date FROM dates WHERE id ='1' ";
  4. $aQResult = mysql_query( $aSQL );
  5. $aRow = mysql_fetch_array( $aQResult );
  6. $day1 = $aRow["date"];
  7.  
  8. $aSQL = "SELECT date FROM dates WHERE id ='2' ";
  9. $aQResult = mysql_query( $aSQL );
  10. $aRow = mysql_fetch_array( $aQResult );
  11. $day2 = $aRow["date"];
  12.  
  13. $aSQL = "SELECT date FROM dates WHERE id ='3' ";
  14. $aQResult = mysql_query( $aSQL );
  15. $aRow = mysql_fetch_array( $aQResult );
  16. $day3 = $aRow["date"];
  17. .
  18. .
  19. .
  20.  
  21. ?>

Chodzi głównie o to aby na koncu powstało 10 zmiennych 'day1,2,3...' zawierających daty z pol o ID od 1 do 10.

ID nie jest problemem ale chodzi o tworzenie zmiennych. Próbowałem coś z $$day ale jakoś mi nie wychodziłp sadsmiley02.gif

A moze lepiej to zrobić na tablicach?


--------------------
Załóż konto na dropbox.
Go to the top of the page
+Quote Post
mike
post
Post #2





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

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


Tu masz o dynamicznym daklarowaniu zmiennych: Deklarowanie zmiennych, na podstawie wyników bazy danych MySQL.
Wystarczyło przeszukać forum.

----edit----
A tak poza tym:
1. Zamiast wykonywać tyle zapytań i pisać taki nieładny (UWAGA! Delikatne okeślenie) kod, zadać takie zapytanie:
  1. <?php
  2.  
  3. $aSQL = 'SELECT date FROM dates WHERE id <= 10';
  4.  
  5. ?>

2. Jak już zauważyłeś nie umieściłem watrości id w apostrofach. Dlatego, że to są liczby, a nie ciągi znakowe.
Go to the top of the page
+Quote Post
My4tic
post
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Ehh, dzieki.


--------------------
Załóż konto na dropbox.
Go to the top of the page
+Quote Post
ghostrider
post
Post #4





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 30.09.2005
Skąd: k-rk

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


zgodze sie z mike_mech,
jesli będziemy mieli list powiedzmy 60 id i 60 uzytkowników w jednym czasie wywoła skrypt to wykonamy 3600 zapytań do bazy, mySQL sie spoci!

w petli mozemy skonstruowac zapytnie dodając " OR id ='liczba' " dla każdego potrzebnego ID i potem wywołac je raz

a dynamiczne zmienne to fajna rzecz, jednak w moich przeprawach z programowaniem w jakimkolwiek języku odkryłem ze chodzi o tk naprawdę o dwie rzeczy:

Pętle i Tablice - te dwie rzeczy pasują do siebie jak ... err, ulał

zalety to spójny io przejrzysty kod
minusy, nie znalazłem zadnych

Cytat
2.  Jak już zauważyłeś nie umieściłem watrości id w apostrofach. Dlatego, że to są liczby, a nie ciągi znakowe.


a ja zuwazyłem ze jak sie liczby puści w apostrofy to szybciej działa, nie wiem czemu tak jest, ale testowałem (mySQL 4.1) i sam byłem zaskoczony

----edit----
Bykom STOP tongue.gif
~mike_mech


Ten post edytował ghostrider 31.10.2005, 11:51:49


--------------------
There are 10 types of people in the world:
-Those who understand binary, and those who don't...
There's no place like 127.0.0.1
Go to the top of the page
+Quote Post
My4tic
post
Post #5





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Dzięki za rady.

Narazie funkcja wygląda tak:

  1. <?php
  2.  
  3. function change_index () {  
  4. $aSQL = "SELECT date FROM dates";
  5. $aQResult = mysql_query( $aSQL );
  6.  
  7. $day = array();
  8. $i=1;
  9. while ($aRow = mysql_fetch_array( $aQResult )) {
  10.  $day[$i] = $aRow["date"];
  11.  $i++;
  12. }
  13.  
  14. $k=1;
  15. for ($i=1; $i<11; $i++) {
  16.  $k++;
  17.  $aSQL = "UPDATE dates SET date = '$day[$k]' WHERE id='$i'";
  18.  $aQResult = mysql_query( $aSQL ); echo mysql_error();
  19. }
  20.  
  21. $pieces = explode(".", $day[10]);
  22. $i=1;
  23. $timestamp = mktime (0,0,0,$pieces[1], $pieces[0]+$i, $pieces[2]);
  24. $weekday = date('w', $timestamp); 
  25. $data1 = date('d.m.Y', $timestamp);
  26.  
  27. while ($weekday == "6" || $weekday == "0") {  
  28. $pieces = explode(".", $day[10]);
  29. $i++;
  30. $timestamp = mktime (0,0,0,$pieces[1], $pieces[0]+$i, $pieces[2]);
  31. $weekday = date('w', $timestamp);
  32. $data1 = date('d.m.Y', $timestamp); 
  33. }
  34. $aSQL = "UPDATE dates SET date = '$data1' WHERE id='10';";
  35. $aQResult = mysql_query( $aSQL ); echo mysql_error();
  36. }
  37.  
  38. ?>


Funkcja przesuwa daty z 'ID + 1' do ID a do powstałej na końcu wolnej komórki wpisuje kolejną date powstałą z dodania do ID10 jednego dnia. Uwzględnia tylko dni robocze.

Pewnie troche nieoptymalnie napisałem ;-) ale działa :-)

Na szybkości w tym mi za bardzo nie zależy bo bedzie to uruchamiane raz dziennie przez crona.


--------------------
Załóż konto na dropbox.
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 Aktualny czas: 20.08.2025 - 11:47