Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pętla-'dynamiczne zmienne'
Forum PHP.pl > Forum > PHP
My4tic
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?
mike
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.
My4tic
Ehh, dzieki.
ghostrider
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
My4tic
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.
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.