我正在尝试使用Flot,html,PHP和MySql查询绘制多个图表,但我被卡住了,因为我无法找到一种方法来在同一个html页面中绘制多个图。 在数据库(test_db3)图像中为简单起见,包括以下字段:
那两个表无法修改,我无法将user_name2添加到table1等等。 在table1中根据发送的时间存储发送邮件的值 在表2中存储基于接收时间的接收邮件的值
在此代码之前,我已经使用之前编写的另一个代码测试了存储在数据库中的数据,它只能绘制一个用户的2个图表,但数据和图表正确绘制。 现在我正在尝试为DB的所有用户绘制2个图表我被卡住了! 如果有必要,我可以发布第一个代码,用于从单个用户的数据库中提取数据。 如果有人有任何建议......谢谢!
<html>
<script language="javascript" type="text/javascript" src="js/jquery.js"></script>
<script language="javascript" type="text/javascript" src="js/jquery.flot.js"></script>
<?php
/*
connection to the database
*/
$server = "localhost";
$user="xxxxxx";
$password=" xxxxxx ";
$database = "test_db3";
$connection = mysql_connect($server,$user,$password) or die (mysql_error());
$db = mysql_select_db($database,$connection) or die (mysql_error());
//The first Sql query is searching for DISTINCT users in the DB
$data = mysql_query("SELECT DISTINCT user_name FROM table1 JOIN table2 ON user_name=user_name2") or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
$user = $info['user_name']; //It’s the name of user analyzed at the moment
/*
This query extract the first ten more recents values (order by time DESC)
The data retrieved by the query are used to paint the 1° chart for emails sent by the user
but I don't know how to do it recursively
*/
$query = "SELECT user_name,mail_sent,time FROM table1 WHERE user_name='$user' ORDER BY time DESC LIMIT 0,10";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result))
{
$row['time']=$row['time']*1000; //The time is in millisecond I need to multiply for 1000 in order to obtain the seconds
//the 'time' row is the x-axis , the 'mail_send' row is the y-axsis
$dataset1[] = array($row['time'],$row['mail_sent']); //It contains the time value and the numbers of email sent from the user
}
/*
This query extract the first ten more recents values (order by time2 DESC)
The data retrieved by the query are used to paint the 2° chart for emails received by the user
but I don't know how to do it recursively
*/
$query2 = "SELECT user_name2,mail_received ,time2 FROM table2 WHERE user_name2='$user' ORDER BY time2 DESC LIMIT 0,10";
$result2 = mysql_query($query2);
while($row2 = mysql_fetch_assoc($result2))
{
$row2['time2']=$row2['time2']*1000; //The time is in millisecond I need to multiply for 1000 in order to obtain the seconds
//the 'time' row is the x-axis , the 'mail_send' row is the y-axsis
$dataset2[] = array($row2['time2'],$row2['mail_received ']); //It contains the time value and the numbers of email received from the user
}
/*
Here I should insert some code in order to draw 2 charts for all the users of the DB, so for example if the DB has 30 Users
i need to draw 60 charts, 2 charts for any users
-> the 1° charts represents the mail sent from the user
-> the 2° charts represents the mail received from the user
*/
}
mysql_close($connection); //Close connection DB
?>
<script type="text/javascript">
$(function () {
// setup plot
var options = {
series: {
lines: { show: true },
points: { show: true }
},
//the value of min:0 and max:100 are just examples of course
yaxis: { min: 0, max: 100 },
xaxis: {
mode: "time",
minTickSize: [1, "minute"],
}
};
var dataset1 = <?php echo json_encode($dataset1); ?>;
var dataset2 = <?php echo json_encode($dataset2); ?>;
//This part is not correct because the palaceholder should have a increment value
//placeholder0, placeholder1, placeholder3, placeholder4, ..., placeholderN
//And it is necessary to place a <div id="placeholderN" style="width:350px;height:200px;"> </div> in the PHP code for every placeholder generated
//or find another solution
var plot1 = $.plot($(placeholder0), [ dataset1, dataset2 ], options); //For the 1° charts
var plot2 = $.plot($(placeholder1), [ dataset1, dataset2 ], options); //Fot the 2° charts
});//End script
</script>
</html>
答案 0 :(得分:0)
首先,拥有user_name2,time2等似乎有点奇怪。对于第二个查询。这真的是如何在你的数据库中设置的吗?
无论如何,这是从PHP循环中生成绘图的一种方法。
echo('<div id="placeholder"></div>');
echo('<script>');
while($info = mysql_fetch_array( $data ))
{
$user = $info['user_name']; //It’s the name of user analyzed at the moment
/*
This query extract the first ten more recents values (order by time DESC)
The data retrieved by the query are used to paint the 1° chart for emails sent by the user
but I don't know how to do it recursively
*/
$query = "SELECT user_name,mail_sent,mail_received,time FROM table1 WHERE user_name='$user' ORDER BY time DESC LIMIT 0,10";
$result = mysql_query($query);
$dataset1 = new Array();
while($row = mysql_fetch_assoc($result))
{
$row['time']=$row['time']*1000; //The time is in millisecond I need to multiply for 1000 in order to obtain the seconds
//the 'time' row is the x-axis , the 'mail_send' row is the y-axsis
$dataset1[] = array($row['time'],$row['mail_sent']); //It contains the time value and the numbers of email sent from the user
}
echo('$.plot( $(\'<div style="width:600px;height:300px;"></div>\').appendTo(\'#placeholder\'),'.json_encode($dataset1).',options);\n');
}
echo('</script>');