Ich habe eine Tabelle 'entrezgene' mit genID, Name, der zum Erstellen der Knoten verwendet wird und eine weitere Tabelle 'Interaktion' mit genID, genID2, die als Quelle bzw. Ziel in cytoscape.js verwendet wird.wie Knoten und Elemente aus MySQL-Datenbank in cytoscape.js abrufen?
ich eine PHP-Datei unten geschrieben haben (nur für die entrezgene Tabelle):
<?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 Datei:
$('#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');
}
});
}
});
Aber das Problem ist, dass die Tabelle entrezgene 16.388 Zeilen hat und Die Tabelleninteraktion hat 225.287 Zeilen. Die manuelle Eingabe ist daher zeitaufwendig. Gibt es dafür eine Lösung?
Ich würde vorschlagen, Knoten und Kanten asynchron, über Ajax Aufruf zu lesen. Dh, die Aktion im Server liest die Knoten und Kanten aus der Datenbank und erstellt die Struktur genau so, wie sie von cytoscape benötigt wird. Im Erfolgs-Handler des Ajax Calls erstellen Sie den Baum wie bei Ihren manuell eingegebenen Daten. – derpirscher
Ich bin ziemlich neu auf der Web-Plattform, also können Sie bitte ein wenig ausarbeiten. –