2016-03-26 15 views
2

私はノードを作成するために使用される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行あります。手動で入力すると時間がかかります。そこに解決策はありますか?

+0

私は、ノードとエッジをAjax呼び出しで非同期に読み取ることをお勧めします。つまり、サーバー内のアクションはデータベースからノードとエッジを読み取り、cytoscapeによって必要に応じて正確に構造を作成します。 Ajax Callの成功ハンドラでは、手動で入力したデータと同様に、ツリーを構築します。 – derpirscher

+0

私はウェブプラットフォームにはかなり新しいので、少し丁寧に説明することができます。 –

答えて

2

私はあなたのプロジェクト全体の構造を知らないので、私は、詳細な指示を与えることができないかもしれないが、私は、私は私のプロジェクトの一つでcytoscape.jsを使用する方法をお見せすることができます。これは除いてある

私のgraphview.jsの

メインエントリーポイントは、あなたがドキュメントの準備や要素のクリックを呼び出すかもしれないinit関数です。これはサーバーへのajax呼び出しを実行し、呼び出しが成功した場合は、受け取ったデータで関数displaygraphを呼び出します。

var init = function() { 
    //.. do some overall initialization 
    $.ajax({ 
     url: '/url/to/getgraph.php', 
     method: 'GET', 
     dataType: 'json', 
     data: {}, //probably you have some parameters 
     success: displaygraph, 
     error: function() {alert('error getting data');} 
    }); 
} 

関数displaygraphは、グラフの初期化と表示を行います。 ajax呼び出しからデータを受け取ります。上記のコードは多かれ少なかれ、ノードとエッジはプリエントラではなく、サーバーから受け取ったデータから取得されます。

var displaygraph = function(data) { 
    $('#cy').cytoscape({ 
     style: // ... 

     elements: { 
      nodes: data.nodes, 
      edges: data.edges 
     }, 

     ready: function(){ 
      //... 
     } 
    }); 

} 

そしてサーバーサイドでの、あなたは確認する必要があり、クライアントに返されたデータ、すなわち、すべての必要な情報を含んで、ノードとcytoscapeがそれを期待するように構成されたエッジ。私はPHPの人ではないので、チェックすることはできませんので、他のテーブルからインタラクションを読み込み、ノードとエッジを含むオブジェクト上に作成しました。

<?php 
include 'dbconnection.php'; 

$sqlentrezgene = "select geneID, name from entrezgene"; 
$resultentrezgene = mysqli_query($connection, $sqlentrezgene) or die("Error in Selecting " . mysqli_error($connection)); 

$nodes= array(); 
while($row = mysqli_fetch_array ($resultentrezgene))  
{ 
    //create each entry in the array exactly as cytoscape expects it, ie with the data property 
    $entrezgene = array('data' => array(
     'id' => $row['geneID'], 
     'name' => $row['name'] 
    )); 
    array_push($nodes, $entrezgene); 
} 

$sqlentrezinter = "select geneID1, geneID2 from interaction"; 
$resultentrezinter = mysqli_query($connection, $sqlentrezinter) or die("Error in Selecting " . mysqli_error($connection)); 

$edges= array(); 
while($row = mysqli_fetch_array ($resultentrezinter))  
{ 
    $entrezinter = array('data' => array(
     'source' => $row['geneID1'], 
     'target' => $row['geneID2'] 
    )); 
    array_push($edges, $entrezinter); 
} 

$json = array(
    'nodes' => $nodes, 
    'edges' => $edges 
); 

$jsonstring = json_encode($json); 
echo $jsonstring; 
?> 

私はPHPの男じゃないので、サーバの一部に何らかの不具合があるかもしれませんが、あなたは、全体的なアイデアを得る必要があります。

+0

ありがとうございました。 –

関連する問題