我正在尝试使用 Flot、html、PHP 和 MySql 查询绘制多个图表,但我被卡住了,因为我找不到在同一个 html 页面中绘制多个 flot 的方法。 为简单起见,在数据库 (test_db3) 图像中包含以下字段:
- table1(用户名, mail_sent, 时间)
- table2(user_name2, mail_received,time2)
那两个表不能修改,我不能把user_name2加到table1等等。 在 table1 中存储了基于发送时间的已发送邮件的值 在表2中存储了基于接收时间的接收邮件的值
在这段代码之前,我已经用之前编写的另一段代码测试了存储在数据库中的数据,它只能绘制一个用户的 2 个图表,但数据和图表正确绘制。 现在我正在尝试为数据库的所有用户绘制 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>
最佳答案
首先,拥有 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>');
关于php - 使用 Flot、html、PHP 和 MySql 查询绘制多个图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439831/