在d3

时间:2016-02-18 00:00:15

标签: php mysql d3.js

我正在使用d3散点图,在图表上将纸张显示为点。它连接到具有多个表的数据库。我想要做的是当我点击图表上的一个点上的时,我希望它引用的论文出现在图表上。数据库中的引用表如下 - 其中ID_from是纸质ID列表,ID_to是纸张引用的纸张ID:

ID_from    ID_to
1           12
1           40
2           7
3           2
3           50
3           N
...
N           13  

因此,例如,如果我点击纸张ID 3,我希望纸张2,50和N在图表上显示为点。 我有一个非常模糊的想法,这应该如何工作,即在onClick函数中执行php函数?但我的问题是如何做到这一点?我可以使用相同的PHP脚本与其中定义的其他查询? 这是我的PHP脚本连接到数据库与我需要执行的其他查询没有点击。

<?php
$username = "xxx"; 
$password = "";   
$host = "xxx";
$database="xxx";

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

$data = array(
'query1Results' => array(),
'query2Results' => array()
);

$myquery = "SELECT  `ID`, `TITLE`, `YEAR`,`In_library` FROM  `papers` where In_library = 1";

$query1 = mysql_query($myquery);

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

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

$query2 = mysql_query("SELECT `ID_to`, count(*) as `counter` from `citations` group by `ID_to` DESC");

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

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

echo json_encode($data);     

mysql_close($server);


?>

我对查询的内容还有一个完整的空白(我是sql的新手)并且在变量ID上让自己感到困惑

感谢您提前反馈

编辑:以下是我的数据库的结构 论文表:

ID   TITLE   YEAR   IN_LIBRARY
ID1  TITLE1  YEAR     1
ID2   TITLE2  YEAR    0

引文表(例如上文):

ID_from    ID_to

作者表:

ID    AUTHOR
1     AUTHOR1
1     AUTHOR1.2
2     AUTHOR2
3     AUTHOR3
3     AUTHOR3.1
3     AUTHOR3.2  

1 个答案:

答案 0 :(得分:1)

您可以使用包含在.click()处理程序中的jQuery ajax调用来执行PHP。

https://api.jquery.com/jQuery.ajax/

https://api.jquery.com/click/

如果你正确考虑了PHP,那么你应该可以使用相同的文件来点击任何点。

<?php

// Grab posted variables
$fromID = $_POST['fromID']; // From what you explained this will always be a single value.
$toID = $_POST['toID']; // From what you explained this will be an array, you could accomplish this easily by crating a hidded input for each value of the toID on the scatterplot dot I have given an example of this code below
$toID = join(',',$toID); 

/*
    <input type="hidden" name="toID[]" value="2">
    <input type="hidden" name="toID[]" value="50">
    <input type="hidden" name="toID[]" value="N">
*/

$query = mysql_query("SELECT * FROM `citations` WHERE `ID_from` = {$toID} AND `ID_to` IN {$toID}");

if ( ! $query ) {
    echo mysql_error();
    die;
}else{
    // You will then need to return the HTML to the browser for the ajax call to create the new dots on the scatter plot
    $html="html here"
    $html.= "next line of html"
    echo $html;
}




// I would also consider using mysqli or mysql pdo
// Hope this helps

?>

以下是mysqli和mysql PDO的起始位置

http://php.net/manual/en/ref.pdo-mysql.php

http://php.net/manual/en/book.mysqli.php

如果您需要任何澄清,请告诉我。