私はノードを作成するために使用されるgeneID、およびcytoscape.jsのそれぞれのソースおよびターゲットとして使用されるgeneID、geneID2を含む別のテーブル 'interaction'を含むテーブル 'entrezgene'を持っています。cytoscape.jsのmysqlデータベースからノードと要素を取り出す方法は?
私は(だけEntrezGeneのテーブル用)以下のPHPファイルを書かれている:ファイル
<?php
include 'dbconnection.php';
$sqlentrezgene = "select geneID, name from entrezgene";
$resultentrezgene = mysqli_query($connection, $sqlentrezgene) or die("Error in Selecting " . mysqli_error($connection));
$json = array();
while($row = mysqli_fetch_array ($resultentrezgene))
{
$entrezgene = array(
'id' => $row['geneID'],
'name' => $row['name']
);
array_push($json, $entrezgene);
}
$jsonstring = json_encode($json);
echo $jsonstring;
?>
Cytoscape.jsを:
$('#cy').cytoscape({
style: cytoscape.stylesheet()
.selector('node')
.css({
'content': 'data(name)',
'text-valign': 'top',
'color': 'white',
'text-outline-width': 1,
'text-outline-color': '#888'
})
.selector('edge')
.css({
'target-arrow-shape': 'triangle'
})
.selector(':selected')
.css({
'background-color': 'black',
'line-color': 'black',
'target-arrow-color': 'black',
'source-arrow-color': 'black'
})
.selector('.faded')
.css({
'opacity': 0,
'text-opacity': 0.25
}),
elements: {
nodes: [
//Manually entered
{ data: {id: '1', name: 'A1BG_HUMAN'} },
{ data: {id: '10549', name: 'PRDX4_HUMAN'} },
{ data: {id: '10935', name: 'PRDX3_HUMAN'} },
{ data: {id: '1192', name: 'CLIC1_HUMAN'} },
{ data: {id: '2923', name: 'PDIA3_HUMAN'} }
],
edges: [
//Manually entered
{ data: { source: '1', target: '10549' } },
{ data: { source: '10549', target: '10935' } },
{ data: { source: '10549', target: '1192' } },
{ data: { source: '10549', target: '2923' } }
]
},
ready: function(){
window.cy = this;
// giddy up...
cy.elements().unselectify();
cy.on('tap', 'node', function(e){
var node = e.cyTarget;
var neighborhood = node.neighborhood().add(node);
cy.elements().addClass('faded');
neighborhood.removeClass('faded');
});
cy.on('tap', function(e){
if(e.cyTarget === cy){
cy.elements().removeClass('faded');
}
});
}
});
しかし、問題は、テーブルEntrezGeneのは16388行を持っていることで、テーブルの対話には225,287行あります。手動で入力すると時間がかかります。そこに解決策はありますか?
私は、ノードとエッジをAjax呼び出しで非同期に読み取ることをお勧めします。つまり、サーバー内のアクションはデータベースからノードとエッジを読み取り、cytoscapeによって必要に応じて正確に構造を作成します。 Ajax Callの成功ハンドラでは、手動で入力したデータと同様に、ツリーを構築します。 – derpirscher
私はウェブプラットフォームにはかなり新しいので、少し丁寧に説明することができます。 –