Per datasource relazionale si intende la famiglia dei ds progettata per interfacciarsi a strutture dati di tipo relazionale, principalmente database relazionali. L'esigenze che si possono avere nell'effettuare delle richieste verso un database sono divese, per tale motivo il tag ds contiene più attributi dedicati alla loro gestione. Alcuni esempi:
Per effettuare una connessione ad una tabella di un database.
Se volessimo specificare i campi da restituire(selecteditems), un filtro per le righe(dswhere), un ordinamento(dsorder) e limitare le righe restituite(dslimit) basta fare:
Se volessimo effettuare un join tra tabelle:
SI IMPLEMENTA
Se volessimo effettuare una query:
CASI PARTICOLARI DI JOIN:
Quando i dati da mettere insieme tramite JOIN provengono da database diversi quindi diverse sono le connessioni da utilizzare la storia di complice un pò, nel senso che questo legame non può essere espresso tramite il solo XML ma è necessario scrivere qualche riga di codice PHP, rifacendoci all'esempio sopra di suppone che tabella1, tabella2 e tabella3 si trovino in database differenti, la soluzione da adottare sarebbe questa:
<ds2 typeobj="ds" conn="connB" .... dskey="key" dstable="tabella2" loadall="false" />
<ds3 typeobj="ds" conn="connC" .... dskey="key" dstable="tabella3" loadall="false" />
poi aggiungere questo codice nella pagina XML:
<?php
function data_select_after($ds)
{
global $xml;
if ($ds->getPropertyName("id")=="ds1")
{
$ds2 = $xml->getObjById("ds2");
$ds3 = $xml->getObjById("ds3");
$result = array();
$i=0;
while($row = $ds->ds->dsGetRow())
{
$key = $row->key;
$result[$i]['tabella1campo1'] = $row->campo1;
............................
$result[$i]['tabella1campon'] = $row->campon;
$ds2->ds->dsConnect();
$ds2->ds->dsQuery("SELECT ........... FROM `tabella2` WHERE `tabella2`.`tab1key` = '".$key."'");
while($row = $ds2->ds->dsGetRow())
{
$result[$i]['tabella2campo1'] = $row->campo1;
............................
$result[$i]['tabella2campom'] = $row->campon;
}
$ds3->ds->dsConnect();
$ds3->ds->dsQuery("SELECT ........ FROM `tabella3` WHERE `tabella3`.`tab1key` = '".$key."'");
while($row = $ds3->ds->dsGetRow())
{
$result[$i]['tabella3campo1'] = $row->campo1;
............................
$result[$i]['tabella3campom'] = $row->campon;
}
$i++;
}
$ds->setProperty("xml", $xml->dataXML($result)); // output XML
// $ds->setProperty("xml", $xml->dataJSON($result)); // output JSON
return false;
}
}
?>
In sostanza si modifica il risultato del ds1 al fine di ottenere un unico datasource contenente il risultato complessivo delle tre tabelle.