Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zamiana Array na zapytanie do bazy
Forum PHP.pl > Forum > Przedszkole
roobik
Witam!
Sam nie wiem, od czego zacząć, bo to trochę skomplikowane.
Zacznę więc od kawałka kodu:
  1. $data_1 = array(130,15,23,215);

Nie czepiam się tego array'a, bo wyświetla się wszystko w porządku.
Lecz (i tu jest problem) w jaki sposób zrobić, by w tym array'u było zapytanie do bazy? Po prostu nie chcę "sztywnych" liczb, bo w bazie się one zmieniają...

kuba_pilach
A więc tak:
  1. $zapytanie = mysql_query("select * from test")
  2. $ile = mysql_num_rows($zapytanie);
  3. for ($i=0; $i<$ile; $i++) {
  4. $result = mysql_fetch_assoc($zapytanie);
  5. $tab[i] = $result['kolumna'];
  6. }
  7. foreach($tab as $i) {
  8. echo $i;
  9. }

Wcześniej oczywiście łączysz się z bazą itp... Pogrubiłem swoją tabelę, ty wprowadź swoją....
Mam nadzieję, że pomogłem ;]
roobik
Twój kod wywala tylko jeden (ostatni) rekord. Ja spróbowałem również czegoś innego (z pętlą while), ale mimo, że wysypało mi wszystkie liczby, to za nic nie działa to ze skryptem jpgraph (wersja 3.5.0b1)

może jakieś inne (p)odpowiedzi?
to powinno raczzej być coś w stylu:
$data_1 = array($i);
albo jakoś ... nie wiem sam
kadlub
kolega nie dopisał dolarka przy i wstaw to :

  1.  
  2. $tab[$i] = $result['kolumna'];
roobik
OK. Pięknie wysypuje wszystkie liczby, lecz teraz jak to podłączyć do skryptu jpgraph?
webdice
Chcesz wyciągnąć z bazy rekordy których id trzymasz w tablicy? Jeśli tak to poczytaj o implode oraz o WHERE IN.
roobik
Czyli do zapytania mam dodać IN.. Mniej więcej coś takiego:
  1. $zapytanie = mysql_query("select * from licznik where id in $liczba");

Pogubiłem się zupełnie...
Cytat(webdice)
Chcesz wyciągnąć z bazy rekordy których id trzymasz w tablicy?

Chcę raczej włożyć do array'a to co się wysypało, czyli liczby z tabeli (nie id).
kuba_pilach
Sorki za pomyłkę... literówka...
Przecież już ci wysypuje z prostym php... Po co chcesz utrudniać?
roobik
Tak wysypuje ładnie. Jednak skrypt, do którego chcę to podłączyć wymaga tego, by było to w array'u. Także ok - część z wysypem jest jak najbardziej w porządku. Ale jak to dalej ugryźć ?
webdice
Jeśli chcesz pobrać z bazy rekordy gdzie wartości z danej kolumny są takie same jak w tablicy to:

  1. mysql_query( 'SELECT * FROM `table` WHERE `id` IN(' . implode( ',', $array ) . ')' );


Jeśli nie o to Ci chodzi, to napisz z łaski swojej co dokładnie chcesz osiągnąć.
roobik
OK.
Więc po kolei.
W tabeli mam 5 pól: id, rok, miesiac, dzien oraz liczba.
Znalazłem skrypt, który na wykresie liniowym pokazuje... no właśnie - to co ma w array'u.

Postanowiłem go nieco przerobić, tak, by array'em był "zestaw" wszystkich waartości z kolumny liczba i na tej podstawie żeby wyświetlił wykres.
Sam skrypt jest tu -> http://jpgraph.net/download/

Pełny kod (przerobiony) jest taki (zakomentowane jest to, co w oryginale było):
  1. <?php // content="text/plain; charset=utf-8"
  2. require_once ('jpgraph/jpgraph.php');
  3. require_once ('jpgraph/jpgraph_line.php');
  4.  
  5. include 'config.php';
  6. $zapytanie = mysql_query("select * from licznik")
  7. $ile = mysql_num_rows($zapytanie);
  8. for ($i=0; $i<$ile; $i++) {
  9. $datay1 = mysql_fetch_assoc($zapytanie);
  10. $tab[$i] = $result['liczba'];
  11. }
  12. foreach($tab as $i) {
  13.  
  14.  
  15. }
  16.  
  17. //$datay1 = array(50,26,99);
  18. //$datay2 = array(12,9,42,8);
  19. //$datay3 = array(5,17,32,24);
  20.  
  21. // Setup the graph
  22. $graph = new Graph(300,250);
  23. $graph->SetScale("textlin");
  24.  
  25. $theme_class=new UniversalTheme;
  26.  
  27. $graph->SetTheme($theme_class);
  28. $graph->img->SetAntiAliasing(false);
  29. $graph->title->Set('Filled Y-grid');
  30. $graph->SetBox(false);
  31.  
  32. $graph->img->SetAntiAliasing();
  33.  
  34. $graph->yaxis->HideZeroLabel();
  35. $graph->yaxis->HideLine(false);
  36. $graph->yaxis->HideTicks(false,false);
  37.  
  38. $graph->xgrid->Show();
  39. $graph->xgrid->SetLineStyle("solid");
  40. $graph->xaxis->SetTickLabels(array('A','B','C','D'));
  41. $graph->xgrid->SetColor('#E3E3E3');
  42.  
  43. // Create the first line
  44. $p1 = new LinePlot($datay1);
  45. $graph->Add($p1);
  46. $p1->SetColor("#6495ED");
  47. $p1->SetLegend('Line 1');
  48. /*
  49. // Create the second line
  50. $p2 = new LinePlot($datay2);
  51. $graph->Add($p2);
  52. $p2->SetColor("#B22222");
  53. $p2->SetLegend('Line 2');
  54.  
  55. // Create the third line
  56. $p3 = new LinePlot($datay3);
  57. $graph->Add($p3);
  58. $p3->SetColor("#FF1493");
  59. $p3->SetLegend('Line 3');
  60. */
  61. $graph->legend->SetFrameWeight(1);
  62.  
  63. // Output line
  64. $graph->Stroke();
  65.  
  66. ?>
  67.  

W oryginale są trzy linie na jednym wykresie - ja potrzebuję jedną linię. Dlatego potrzebna jest tu linia 18, a 19 i 20 out.
W związku z tym niepotrzebne są linie 49-61.

Jeśli w array'u jest tak, jak w oryginale - to wyświetla się wykres. Ale jak już dam to, co podajecie (przy okazji dziękuję) - to obrazka nie ma ...
webdice
Czyli potrzebujesz stworzyć tablice na podstawie danych z bazy. Tworzysz zapytanie które pobiera interesującą Cię kolumnę, a następnie tworzysz tablice.

  1. $datay1 = array();
  2. $datay2 = array();
  3.  
  4. while( $row = mysql_fetch_assoc( $zapytanie ) )
  5. {
  6. array_push( $datay1, $row['kolumna1'] );
  7. array_push( $datay2, $row['kolumna2'] );
  8. }


Nie używaj funkcji for do operowania na danych pobranych z bazy (zrób to tak jak podałem w przykładnie). Odpadnie Ci funkcja mysql_num_rows która nie jest zalecana.
roobik
webdice - DZIĘKUJĘ BARDZO!!! smile.gif
O to własnie chodziło smile.gif
WIELKIE DZIĘKI!
Pozdrawiam!
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.