在d3可视化中访问MySQL数据库

4 投票
3 回答
8484 浏览
提问于 2025-04-17 14:39

我需要一些关于d3和MySQL的帮助。以下是我的问题:

我在MySQL中存储了一些数据(比如:关键词及其出现频率)。现在我想用d3来可视化这些数据。根据我对d3的了解,它需要一个json文件作为输入。我的问题是:我该如何从d3脚本中访问这个MySQL数据库呢?我想到了一种方法:

  1. 使用Python连接数据库,并将数据转换成json格式。然后把这个数据保存到一个.json文件中。

  2. 在d3中读取这个json文件作为输入,并用它进行可视化。

有没有其他方法可以直接用d3将MySQL中的数据转换成.json格式?我们能否从d3连接到MySQL并读取数据呢?

非常感谢!

3 个回答

1

我偶然发现了一个详细的教程,作者是Jerome Cukier,标题是“在mySql数据库中使用d3”。这个教程似乎能解答你的问题:http://www.jeromecukier.net/blog/2012/01/02/using-d3-with-a-mysql-database/

简单来说,你确实需要一个php(或者perl,或者python)脚本来从服务器上的数据库获取数据。

1

d3 是一个在客户端运行的 JavaScript 库,而 MySQL 数据库是应该在服务器端运行的。
d3 不能直接连接到 MySQL 数据库,更别提把数据转换成 JSON 格式了。你想的那种方法(步骤 1 和 2)其实是应该这样做的。

6

下面是一个PHP脚本,你可以把它保存为一个文件(比如叫做'getdata.php'),然后在你的HTML文件中通过D3代码来访问这个文件。调用这个文件后,它会从你的MySQL数据库中返回数据,格式是json(只要数据库服务器不在你的域外就可以)。

<?php
    $username = "******"; 
    $password = "******";   
    $host = "******";
    $database="***dbase_name***";

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

    $myquery = "
    query here
    ";

    $query = mysql_query($myquery);

    if ( ! $myquery ) {
        echo mysql_error();
        die;
    }

    $data = array();

    for ($x = 0; $x < mysql_num_rows($query); $x++) {
        $data[] = mysql_fetch_assoc($query);
    }

    echo json_encode($data);     

    mysql_close($server);
?>

当然,你需要填写合适的用户名、密码、主机和数据库的详细信息。你还需要写一个合适的查询语句,以便返回'日期时间'和'读数'的数据。大概是这样的(这只是个猜测);

SELECT `dateTimeTaken`, `reading` FROM `tablename`

然后,当你想读取你的json文件时,可以使用以下代码语法来读取json;

d3.json("getdata.php", function(error, data) {

希望这能接近你想要的效果。 我在本地测试过,似乎一切正常。

我还整理了一篇文章,讲解如何在本地安装一个简单的WAMP服务器,以及如何从d3.js设置MySQL数据库的查询,详细内容可以在这里找到 http://www.d3noob.org/2013/02/using-mysql-database-as-source-of-data.html

撰写回答