php - 使用 Flot、html、PHP 和 MySql 查询绘制多个图表

标签 php mysql html charts flot

我正在尝试使用 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/

相关文章:

php - 将数组转换为 ul li 列表

html - 对图像应用不透明度

javascript - 位置 :fixed difference in IE Vs Firefox

php - Lavel 5.x 与 Redis 队列生成大量日志

php - Elastica在setScript之前未对聚合进行分组

php - 在 WooCommerce 中为产品数量添加千位分隔符

php - 向mysql中插入数据

mysql - 更改多可用区选项后,RDS 实例是否会重新启动?

php - 如何修复php非法偏移错误

html - 子菜单仅在悬停时显示