Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Zamiana Array na zapytanie do bazy
roobik
post
Post #1





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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ą...

Go to the top of the page
+Quote Post
kuba_pilach
post
Post #2





Grupa: Zarejestrowani
Postów: 224
Pomógł: 3
Dołączył: 24.12.2010

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


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 ;]
Go to the top of the page
+Quote Post
roobik
post
Post #3





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
kadlub
post
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


kolega nie dopisał dolarka przy i wstaw to :

  1.  
  2. $tab[$i] = $result['kolumna'];


Ten post edytował kadlub 2.04.2011, 20:20:29
Go to the top of the page
+Quote Post
roobik
post
Post #5





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


OK. Pięknie wysypuje wszystkie liczby, lecz teraz jak to podłączyć do skryptu jpgraph?
Go to the top of the page
+Quote Post
webdice
post
Post #6


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Chcesz wyciągnąć z bazy rekordy których id trzymasz w tablicy? Jeśli tak to poczytaj o implode oraz o WHERE IN.
Go to the top of the page
+Quote Post
roobik
post
Post #7





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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).
Go to the top of the page
+Quote Post
kuba_pilach
post
Post #8





Grupa: Zarejestrowani
Postów: 224
Pomógł: 3
Dołączył: 24.12.2010

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


Sorki za pomyłkę... literówka...
Przecież już ci wysypuje z prostym php... Po co chcesz utrudniać?
Go to the top of the page
+Quote Post
roobik
post
Post #9





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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źć ?
Go to the top of the page
+Quote Post
webdice
post
Post #10


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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ąć.
Go to the top of the page
+Quote Post
roobik
post
Post #11





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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 ...

Ten post edytował roobik 2.04.2011, 21:23:06
Go to the top of the page
+Quote Post
webdice
post
Post #12


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.
Go to the top of the page
+Quote Post
roobik
post
Post #13





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


webdice - DZIĘKUJĘ BARDZO!!! (IMG:style_emoticons/default/smile.gif)
O to własnie chodziło (IMG:style_emoticons/default/smile.gif)
WIELKIE DZIĘKI!
Pozdrawiam!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 08:56