以前moriss.jsというグラフ描写ライブラリの使い方がよくわからず、質問させて頂きました。
今回は、値の管理についてです。質問は2つあります。
現在、勉強時間の管理サイトを作成しております。そこでmorris.jsを用いて、グラフを記述しております。
データは、データベースから以下のプログラムで取り出しております。
PHP
1while ($data = mysql_fetch_array($quryset)){ 2 3 if($data[1] == $_SESSION['id']){//ログインユーザとデータの書き込みユーザーが一致したら 4 5 if($flag==0){ 6 echo ","; 7 }else{ 8 $flag=0; 9 } 10 echo "{'date': '" .$data[2]. "', 'time': '" .$data[3]. "'}"; 11 } 12} 13 echo "];"; 14 echo "new Morris.Line({"; 15 echo "element: 'graph',"; 16 echo "data: day_data,"; 17 echo "xkey: 'date',"; 18 echo "ymax: '24',"; 19 echo "ymin: '0',"; 20 echo "ykeys: ['time'],"; 21 echo "labels: ['勉強時間'],"; 22 echo "smooth: false,"; 23 echo "resize: true"; 24 echo "});"; 25 echo "</script>";
データベースの構造はこのようになっています。
上記のプログラムをブラウザで表示した場合以下のようなグラフができます。
ここで質問です。
!!現在グラフのX軸に同一の日付が複数有り【1日にどれだけ勉強したか】が一目でわからない状態です。
→ 日付が同じなら時間を足したい。
そのため上記プログラムの【値の取得】部分を以下のように変えたのですが、表示さえされなくなってしまいました。
PHP
1while ($data = mysql_fetch_array($quryset)){ 2 3 if($data[1] == $_SESSION['id']){//ログインユーザとデータの書き込みユーザーが一致したら 4 5 if($flag==0){ 6 echo ","; 7 }else{ 8 $flag=0; 9 } 10 11 /*この一行を変更*/ 12 // echo "{'date': '" .$data[2]. "', 'time': '" .$data[3]. "'}"; 13 14//ここから ちなみにi=0 befo=-1を上で宣言 15 /*一番最初の日*/ 16 if($i==0 && $befo==-1){ 17 $first=1; 18 $befo=$data[2];//日付 19 $time[$i]=$data[3]; 20 } 21 /*同じ日付*/ 22 else if($data[2]==$befo){ 23 $time[$i]+=$data[3]; 24 } 25 /*違う日付*/ 26 else{ 27 echo "{'date': '" .$befo. "', 'time': '" .$time[$i]. "'}"; 28 $befo=$data[2];//次の日付 29 $i++; 30 $time[$i]=$data[3]; 31 } 32//ここまで 33 34 } 35} 36 echo "];"; 37 echo "new Morris.Line({"; 38 echo "element: 'graph',"; 39 echo "data: day_data,"; 40 echo "xkey: 'date',"; 41 echo "ymax: '24',"; 42 echo "ymin: '0',"; 43 echo "ykeys: ['time'],"; 44 echo "labels: ['勉強時間'],"; 45 echo "smooth: false,"; 46 echo "resize: true"; 47 echo "});"; 48 echo "</script>";
どこがおかしいのでしょうか?
そしてもう1つ質問があります。
!!X軸の日付を最近7日間にしたい。
こちらに関しては、打開策が全くわかりません。 お力を貸してください。
よろしくお願いします。
以下修正
DBへの保存データですが、上記で示したテーブル構造ごとそれぞれ以下のような値が入っております。
実行SQL文に関しては、DBへの接続・テーブルを選択後、上記で示したプログラムの一番上に記述してありますように、
while ($data = mysql_fetch_array($quryset)){
として、後に
if($data[1] == $_SESSION['id']){ //つまりテーブルでのdata1と今見たいuserのIDが一致したら
という条件を置き、それをmorris.js用に保存しております。