通过PHP从MySQL检索数据以创建Flot图表

12

大家好,我想从MySQL数据库中检索数据以创建flot图表,请问有人可以指导我完成这个过程或者给我一些思路吗?谢谢。


你需要什么帮助?我假设你基本上知道如何从数据库中提取数据了? - JorenB
我知道如何提取数据,但是如何创建图表呢? - Sarah
获取数组后,我应该做什么? - Sarah
4个回答

22

你可能想要像这样的东西。我没有使用过flot,但我查看了这里的示例。

<?php
//create array of pairs of x and y values
$dataset1 = array();
while ($row = mysql_fetch_assoc()) { //or whatever
    $dataset1[] = array( $row['xvalue'], $row['yvalue'] );
}
?>

<script type="text/javascript">
    //put array into javascript variable
    var dataset1 = <?php echo json_encode($dataset1); ?>;

    //plot
    $(function () {
         $.plot($("#placeholder"), [ dataset1 ]);
    });
</script>

嗨,我按照你说的做了,但它不起作用,出现了一个异常 $dataset1 = array(); while ($row = mysql_fetch_assoc($sql)) { $dataset1[] = array( $row['msgCount'], $row['Group_ID'] ); } echo json_encode($dataset1);jquery function plotGraph() { alert("In body"); $.ajax({ url:"getData.php", type:"post", datatype:"json", success:function(data) {alert(data); $.plot($("#placeholder"), [ data ]); }, error:function() {alert("There was a problem");} }) } 是否有遗漏的东西? - Sarah
嗨Tom,这个例子真的很有帮助,但现在我遇到了一个处理空值的问题,因为它没有被绘制出来。 - Sarah
@Sarah:我想你可以将它们转换为零 - 可以在查询中使用IFNULL(colName,0),也可以通过将每个值强制转换为整数来在PHP循环中实现。 - Tom Haigh
谢谢,我之前在将 PHP 中的 JSON 传递到 Flot 中遇到了麻烦,但这个方法完美解决了我的问题。 - going

3

@Tom Haigh 的例子基础上,进一步增加:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css">
    <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

<?php

$server = "localhost";
    $user="user";
    $password="password";  
    $database = "some_database";

    $connection = mysql_connect($server,$user,$password);
    $db = mysql_select_db($database,$connection);

query = "SELECT x_axis_values, y_axis_values FROM some_table";
    $result = mysql_query($query);        

    while($row = mysql_fetch_assoc($result))
    {
        $dataset1[] = array($row['x_axis_value'],$row['y_axis_value']);
    }

?>


<script type="text/javascript">
$(function () {
    var dataset1 = <?php echo json_encode($dataset1); ?>;

    $.plot($("#placeholder"), [ dataset1 ]);
});
</script>

 </body>
</html>

看到这个了,只是试图让它工作。我认为你在query前面漏了一个$符号。而且变量$db只被引用了一次,是吗?无论如何,上述代码都不会传播。希望能得到帮助 :) - square_eyes

2

正如@Tom Haigh所说的那样,这个方法可以很好地工作,但是你需要添加另一段代码才能使其更好地工作。我正在使用这个例子,但是我在源代码中发现它会将结果加上引号“”,为了避免这种情况,只需将intval添加到数组中即可,例如:

<?php
$query = "SELECT valx, valy FROM chart";
    $result = mysql_query($query);        

    while($row = mysql_fetch_assoc($result))
    {
        $d2[] = array (intval($row['valx']),intval($row['valy']));
    }
?>

0
这主要取决于您的环境和需求。有很多免费的工具可以使用。一个例子是Flot,它让您可以使用jQuery来构建图表。在Google Code页面上有文档链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接