Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Z MySQL do tablicy
Forum PHP.pl > Forum > Przedszkole
maverickoti
Witam.

Mam problem z zapisaniem tablicy danymi z bazy. Problem polega na tym , że nie wiem ile jest rekordów do zapisania w tablicy. Staram się to rozwiązać w następujący sposób:
1. Loguje się do bazy danych
2. Pobieram wszystkie rekordy gdzie występuje dana fraza :
  1. $query="SELECT `imienazwisko`, `pesel`, `cena`, `rodz_umowy`, `data` FROM `am_umowy` WHERE wystawca = '".$agent."'";

3. Wiem ile jest rekordów dzięki mysql_fetch_assoc($nazwa_zmiennej)
4. I tutaj jest problem jak to zapisać w tablicy, żeby móc potem sortować po jednej z kolumn np dacie.

Starałem się tym sposobem:
  1. $koszyk[] = array(
  2. 'index' => 'wartość',
  3. 'tytul' => $row['title'],
  4. 'idp' => $row['id']
  5. // [...]
  6. );


lub

  1. $tablica[$imienazwisko][$pesel][$cena][$rodz_umowy][$data]=array();


Reasumując poległem. Podejrzewam, że mam już wszystkie klocki do układanki, ale nie umiem ich połączyć. Ktoś pomoże?
_Borys_
  1. $koszyk['tytul'][] = $row['title'];
  2. $koszyk['idp'][] = $row['id'];
  3. ...

Posortuj sobie w MySQL.
-maverickoti-
Borys mozesz trochę dokładniej?

Dokładnie to chcę zszytać z dwóch tabel MySQL do jednej tablicy i dopiero wtedy posortować.

Przykład:
Tabela MySQL XXX:
imienazwisko, pesel, cena, data
rekord1a
rekord2a
rekord3a

Tabela MySQL YYY:
imienazwisko, pesel, cena, data
rekord1b
rekord2b
rekord3b

tablica
rekord1a
rekord2a
rekord3a
rekord1b
rekord2b
rekord3b

i terach sortuje. Najlepsze, że każdy rekord na wsobie np hmm 4 wartości (imienazwisko, pesel, cena, data). Podejrzewam, że muszę jakąś wielowymiarową tablicę zastosować. Każdy rekord będzie miał tyle samo wartości ale nie wiem ile będzie w sumie rekordów. Rozpientość będzie się wachać od 1 do hmm 300 rekordów.

maverickoti
  1. $agent = 'agent1';
  2. $query="SELECT `imienazwisko`, `pesel`, `cena`, `rodz_umowy`, `data` FROM `am_umowy` WHERE wystawca = '".$agent."'";
  3. $r = mysql_query($query);
  4. echo '<ul>';
  5. for($lp=0; $lp < mysql_fetch_assoc($r); $lp++) // 4
  6. {
  7. echo '<li>'.$lp.' - '.$tablica['imienazwisko'].' - '.$row['pesel'].' - '.$row['cena'].' - '.$row['rodz_umowy'].' - '.$row['data'].'</li>';
  8. $tablica[$imienazwisko][$pesel][$cena][$rodz_umowy][$data]=$lp[$imienazwisko]*$lp[$pesel]*$lp[$cena]*$lp[$rodz_umowy]*$lp[$data];
  9. }
  10. echo '</ul>';
  11. mysql_close(); // 5


Wymodzilem cos takiego. Czy ktos wie gdzie są błędy. Ogólnie nie wykazuje żednych błędów, ale $tablica jest pusta a baza danych na 100% ma te dane.
nospor
for($lp=0; $lp < mysql_fetch_assoc($r); $lp++) // 4
Co to niby jest?

Zajrzyj do manuala do funkcji mysql_fetch_assoc() a dowiesz się jak to ma wyglądać a nie zgadujesz i cuda tworzysz ...
Andrzej.W.
mysql_num_rows jeśli już chcesz tak podstawiać do for.
maverickoti
Z góry przepraszam za moj wczorajszy post. Wstyd i tragedia. Ok napisałem to już trochę lepiej, ale nadal mam problem. Mianowicie w kodzie poniżej nie zapisuje mi do tablicy $tablica[].
  1. $agent = 'agent1';
  2. $query="SELECT * FROM `am_umowy` WHERE wystawca = '".$agent."'";
  3. $r = mysql_query($query);
  4.  
  5. $tablica[] = array();
  6. $row = mysql_num_rows($r);
  7. echo '<ul>';
  8. for($lp=0; $lp < $row; $lp++) // 4
  9. {
  10. $imienazwisko=mysql_result($r,$lp,"imienazwisko");
  11. $pesel=mysql_result($r,$lp,"pesel");
  12. $cena=mysql_result($r,$lp,"cena");
  13. $rodz_umowy=mysql_result($r,$lp,"rodz_umowy");
  14. $data=mysql_result($r,$lp,"data");
  15. echo '<li>'.$lp.' - '.$imienazwisko.' - '.$pesel.' - '.$cena.' - '.$rodz_umowy.' - '.$data.'</li>';
  16. $tablica[] = array($lp, $imienazwisko, $pesel, $cena, $rodz_umowy, $data);
  17. }
  18. echo '</ul>';
  19. mysql_close(); // 5
Andrzej.W.
Nie lepiej sortować to odrazu w bazie jak wspomniał Borys, przekazując odpowiednio spreparowane zapytanie, zależne od tego, co zaznaczy klient, np. od opcji w select? Dodajesz tylko do zapytania klauzulę ORDER BY I LIMIT/DESC LIMIT w zależności od tego, czy ma być malejąco czy rosnąco.
np:
  1. 'SELECT*FROM 'am_umowy' WHERE wystawca = '.$agent.' ORDER BY '.$column.' LIMIT '.$limitmin.', '.$limitmax.'


Zmienna $column przyjmuje odpowiednio wartości 'nazwa_kolumny' lub 'nazwa kolumny DESC'

Przy tak skonstruowanym zapytaniu pozostaje Ci tylko wyświetlenie wyniku. smile.gif
Pozdrawiam.
Andrzej.
maverickoti
Niestety nie mogę sortować po tablicy MySQL. Ponieważ w ostatecznym wyniku muszę dostać wartości z dwóch tabel MySQL i nie mogę wyświetlić pierw pierwszej taeli a potem drugiej. One będą się przeplatać (ich wartości.)

Rozwiązałem mój problem. Jak by komuś były potrzebne takie wyniki to podaje code.
  1. $agent = 'agent1';
  2. $query="SELECT * FROM `am_umowy` WHERE wystawca = '".$agent."'";
  3. $r = mysql_query($query);
  4.  
  5. $tablica[] = array();
  6. $row = mysql_num_rows($r);
  7. echo '<ul>';
  8. for($lp=0; $lp < $row; $lp++) // 4
  9. {
  10. $imienazwisko=mysql_result($r,$lp,"imienazwisko");
  11. $pesel=mysql_result($r,$lp,"pesel");
  12. $cena=mysql_result($r,$lp,"cena");
  13. $rodz_umowy=mysql_result($r,$lp,"rodz_umowy");
  14. $data=mysql_result($r,$lp,"data");
  15. echo '<li>'.$lp.' - '.$imienazwisko.' - '.$pesel.' - '.$cena.' - '.$rodz_umowy.' - '.$data.'</li>';
  16. $tablica[] = array($lp, $imienazwisko, $pesel, $cena, $rodz_umowy, $data);
  17. $tablica[] = array('lp'=>$lp, 'ImieNazwisko'=>$imienazwisko, 'Pesel'=>$pesel, 'Cena'=>$cena, 'RodzUmowy'=>$rodz_umowy, 'Data'=>$data);
  18. }
  19. echo '</ul>';
  20. mysql_close(); // 5
  21.  
  22. foreach($tablica as $i => $linia) {
  23. $tablica[i]['lp'];
  24. }
  25.  
  26. print '<pre>';
  27. print_r($tablica);
  28. print '</pre>';
alegorn
Cytat
Niestety nie mogę sortować po tablicy MySQL. Ponieważ w ostatecznym wyniku muszę dostać wartości z dwóch tabel MySQL i nie mogę wyświetlić pierw pierwszej taeli a potem drugiej. One będą się przeplatać (ich wartości.)

join... ?


Cytat
foreach($tablica as $i => $linia) {
$tablica[i]['lp'];
}


co to ma robic....... ?
maverickoti
  1. $agent = 'agent1';
  2. $names = array();
  3. $query1="SELECT * FROM `am_umowy` WHERE wystawca = '".$agent."'";
  4. $r = mysql_query($query1);
  5. $row = mysql_num_rows($r);
  6. echo '<ul>';
  7. for($lp=0; $lp < $row; $lp++) // 4
  8. {
  9. $imienazwisko=mysql_result($r,$lp,"imienazwisko");
  10. $pesel=mysql_result($r,$lp,"pesel");
  11. $cena=mysql_result($r,$lp,"cena");
  12. $rodz_umowy=mysql_result($r,$lp,"rodz_umowy");
  13. $data=mysql_result($r,$lp,"data");
  14. echo '<li>'.$imienazwisko.' - '.$pesel.' - '.$cena.' - '.$rodz_umowy.' - '.$data.'</li>';
  15. $names[] = $lp;
  16. $names = ('imienazwisko', 'pesel', 'cena', 'rodz_umowy', 'data');
  17. }
  18. echo '</ul>';


Kto wie co tu jest nie tak?
nospor
Cytat
Kto wie co tu jest nie tak?
A może byś tak łaskawie raczył napisać czym teraz objawia się błąd.... mamy zgadywaćquestionmark.gif

Lektura obowiązkowa dla Ciebie:
Temat: Jak poprawnie zada pytanie
maverickoti
Racja nospar. Poprostu brak mi sil do tego kodu. Wyskakuje mi taki błąd:
Parse error: syntax error, unexpected ',' in /home/......../examples/finanse_agenta.php on line 16.

Zmieniłem linijkę 15 i 16 na coś takiego:
  1. $names[$lp] = ('imienazwisko'=>$imienazwisko, 'pesel'=>$pesel, 'cena'=>$cena, 'rodz_umowy'=>$rodz_umowy, 'data'=>$data);

i teraz mam taki błąd:
  1. Parse error: syntax error, unexpected T_DOUBLE_ARROW in /home/eab29082/public_html/automarket.co.pl/tcpdf/examples/finanse_agenta.php on line 15

nospor
Skoro chcesz zapisać tablice, to musisz powiedziec ze zapisujesz tablice.... php jak my wróżką nie jest :/

$names[$lp] = array('imienazwisko'=>$imienazwisko, 'pesel'=>$pesel, 'cena'=>$cena, 'rodz_umowy'=>$rodz_umowy, 'data'=>$data);
maverickoti
Dzięki wielkie. Tak jest. Oczywiscie działa biggrin.gif

Oczywiście napotkałem na kolejny problem. Mianowicie posiadam kod który działa. Pobiera on dane z dwóch tablel z bazy SQL po czym sumuje je w jedną tablicę (array). Wynikiem mam dwuwymiarową tablicę. Teraz chcę zsumować wartości liczbowe z 4 kolumny.
LP| imie | nazwisko | wartosc | data
0 | Aa | BBb | 23 | 20.09.12
1 | FL | We | 34 | 23.11.12


Chcę zsumować kolumnę wrtość czyli 23 + 34.

  1. $umowy_array = array();
  2. $zapytanie_faktury = array();
  3. $umowy_total = array();
  4. $agent = 'klimczyk';
  5. $query_umowy="SELECT * FROM `am_umowy` WHERE wystawca = '".$agent."'";
  6. $zapytanie_umowy = mysql_query($query_umowy);
  7. $row = mysql_num_rows($zapytanie_umowy);
  8. for($lp=0; $lp < $row; $lp++) // 4
  9. {
  10. $imienazwisko=mysql_result($zapytanie_umowy,$lp,"imienazwisko");
  11. $pesel=mysql_result($zapytanie_umowy,$lp,"pesel");
  12. $cena=mysql_result($zapytanie_umowy,$lp,"cena");
  13. $rodz_umowy=mysql_result($zapytanie_umowy,$lp,"rodz_umowy");
  14. $data=mysql_result($zapytanie_umowy,$lp,"data");
  15. $umowy_array[$lp] = array($imienazwisko, $pesel, $cena, $rodz_umowy, $data);
  16. }
  17. $query_faktury="SELECT * FROM `am_faktury` WHERE wystawca = '".$agent."'";
  18. $zapytanie_faktury = mysql_query($query_umowy);
  19. $row = mysql_num_rows($zapytanie_faktury);
  20. for($lp=0; $lp < $row; $lp++) // 4
  21. {
  22. $imienazwisko=mysql_result($zapytanie_faktury,$lp,"imienazwisko");
  23. $pesel=mysql_result($zapytanie_faktury,$lp,"pesel");
  24. $cena=mysql_result($zapytanie_faktury,$lp,"cena");
  25. $rodz_umowy=mysql_result($zapytanie_faktury,$lp,"rodz_umowy");
  26. $data=mysql_result($zapytanie_faktury,$lp,"data");
  27. $faktury_array[$lp] = array($imienazwisko, $pesel, $cena, $rodz_umowy, $data);
  28. }
  29. $umowy_total = array_merge($umowy_array, $faktury_array);
  30. foreach ( $umowy_total as $pozycja => $wartosc_komorki ){
  31. $suma += $umowy_total[$wartosc_komorki][4];
  32. $liczba_p = $pozycja + 1;
  33. echo '<tr><td><b>' . $liczba_p. '</b></td>';
  34.  
  35. for ( $i = 0; $i < count($wartosc_komorki); $i++ )
  36. {
  37. echo '<td>' .$wartosc_komorki[$i]. '</td>';
  38. }
  39.  
  40. echo '</tr>';
  41. }
  42. print_r($suma);


W wierszu 32 coś tam uskuteczniałem ale nic nie wyszło. Wyskakuje błąd: Warning: Illegal offset type in /home/......
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.