Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql][pdo]instrukcje sterujące w zależności od pobranych danych z bazy
Forum PHP.pl > Forum > Przedszkole
gawar
Witam,
Mam problem z instrukcjami, które poprawnie by mi uporządkowały dane z bazy. Mam tabelę w MySQL i pobieram jej dane za pomocą PDO. Dane te wyglądają jak poniżej.
id|A | B | C
1 |1 | 1 | 1
2 |1 | 1 | 2
3 |1 | 1 | 3
4 |1 | 2 | 1
5 |1 | 2 | 2
6 |2 | 1 | 1
7 |2 | 1 | 2
Tylko że jest ich dużo dużo więcej
Moje zapytanie i pobranie danych wygląda następująco
  1. $sort=$sth->prepare('SELECT id,a, b, c from tabela order by a ASC, b, ASC, c ASC');
  2. $sort->execute();
  3. if ($sort->rowCount() > 0)
  4. {
  5. // tu pojawia się problem jakie powinny być pętle i instrukcje
  6. }

Chciałbym żeby w zależności od wartości jaka jest w A i B odpowiednio przypisywane były do id zmienne (które były by też zależne od siebie). Np. do id=3 żeby została przypisana zmienna x=1 (ze względu na wartość A) oraz zmienna y=1(ze względu na wartośćB), natomiast dla id=7 żeby została przypisana zmienna x=2 i y=1. Problemem dla mnie jest to że wartości w A i B są różne, danych w tabeli jest około 8tys. i nie wiem jak napisać instrukcje sterujące które pozwolą mi np. w przypadku gdy x=2 i y=1 zwiększyć np. wartość innej zmiennej o np. 5. Przyznam szczerze że przerasta mnie w tym przypadku samo wymyślenie sposobu na to. Bardzo proszę o pomoc.
nospor
Nie bardzo rozumiem twojego problemu..... Chesz do x i y przypisac wartosci z kolumn A oraz B. W czym problem?
Chcesz w zaleznosci od x i y zwiekszyc jakas inna zmienną. Tu skolei zwykly IF.

przenosze na przedszkole
gawar
W zależności od A i B chciałbym zmieniać zmienne. Np dla:
id|A | B | C
1 |1 | 1 | 1 tutaj chciałbym żeby wykonało się zwiększenie x= x+5 i y=y+5
i
6 |2 | 1 | 1 a tutaj żeby x=x+5+5 a y=y+5
i tak dalej w zależności od wartości A i B. Nie wiem jak to rozpisać jak np wartość max w A jest 80 a w B może być 90 tak żeby od tych dwóch wartości te zmienne się zwiększały. Nie wiem czy dobrze to tłumacze:P
nospor
Nie umiesz zrobic:
x = x + 80*5
? Nie przesadzasz troszke?
no_face
Przelatujesz petla po wszystkich rekordach. Pobierasz wartosc A i B, dodajesz do nich 5 i robisz update tych nowych zwiekszonych wartosci. Tak to zrozumialem.
gawar
Witam, Trochę to skomplikowane tzn. wytłumaczenie tego:( Mam problem z napisaniem tej pętli.
  1. $sort=$sth->prepare('SELECT id,a, b, c from tabela order by a ASC, b, ASC, c ASC');
  2. $sort->execute();
  3. if ($sort->rowCount() > 0)
  4. {
  5. $id = $r["id"];
  6. $a = $r["a"];
  7. $b = $r["b"];
  8. $c = $r["c"];
  9. if($a ==1){
  10. $y=15*$b;
  11. $x=15*$c;
  12.  
  13. $i='<rect id="'.$id.'" x="'.$x.'" y="'.$y.'" width="10" height="10" fill="red"/>';
  14. fwrite($plik1, $i);
  15. }

i teraz dla a=1 jest ok rysuje wszystko się tak jak powinno. Ale jeżeli już a=2 to nie wiem jak pownienem rozpisać tą pętlę, tak aby w momencie gdy a zwiększa się o jeden to do y dodaje się np 50, a x zostaje bez zmian czyli $x=15*$c;. Nie wiem jak rozpoznać w pętli i zmienić stan przy zmianie a.

Bardzo proszę o pomoc
nospor
Napisz dokladnie co ma byc dla a=1 dla a=2 dla a=3 dla a=4. Na chwile obecna zmieniasz zeznania co 5 sekund.
gawar
No więc jeżeli dla a=1 mam
  1. $y=15*$b;
  2. $x=15*$c;

to np dla a= 2 chciałbym mieć stan z ostatniego elementu pętli dla a=1 plus np 50, dla a=3 stan z ostatniego elementu dla a=2 plus 50 itd itd.
nospor
Dalej nie kumam. Strzelam:
  1. if ($sort->rowCount() > 0)
  2.  
  3. {
  4.  
  5. $id = $r["id"];
  6.  
  7. $a = $r["a"];
  8.  
  9. $b = $r["b"];
  10.  
  11. $c = $r["c"];
  12.  
  13.  
  14. $y=15*$b+($a-1)*50; //ZWYKLE MNOZENIE O KTORYM CI PISALEM
  15.  
  16. $x=15*$c;
  17.  
  18.  
  19.  
  20. $i='<rect id="'.$id.'" x="'.$x.'" y="'.$y.'" width="10" height="10" fill="red"/>';
  21.  
  22. fwrite($plik1, $i);
  23.  
  24. }
gawar
Po części:)
Tylko chciałbym jeszcze uwzględnić zależną zmieną $b.
np. $a=1 $b=55 to chciałbym żeby to :
$y=15*$b+($a-1)*50;
miało na uwadzę również tą zmieną $b. Jeżeli pętla przejdzie przez całe $a=1 to żeby przy pierwszym $a=2 uwzględniło ostatnią wartość $b np55 z $a=1.
nospor
No to zapisuj sobie maksymalne $b z danego $a i wstawiaj potem w obliczenia.
gawar
Tylko nie wiem jak to zrobićsad.gif
potrafie sobie z mysql wyciągnąć za pomocą dodatkowego zapytania (z group by a i max(cool.gif) te max b dla każdego a. Ale jak to scalić ze sobą? Podejrzewam że dodatkowe zapytanie jest zbędne i tylko skomplikuje sprawę.
Pomoże ktoś?smile.gif

Pomoże ktoś? nie wiem jak wyciągnąć tą maksymalną wartośc b dla konkretnego a:(

Pomoże ktośquestionmark.gif
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.