350.000 mil registros, se que es algo inusual mostrar en TDatatable una consulta con esa cantidad de registros, pero
es una de la maneras de probar el poder de las dos clases trabajando juntas.
A continuacion explico y pongo el codigo.
- 1 Pasar al server la consulta con el nombre del archivo json a crear
2 Crear el archivo json en el servidor donde se guardan los registros traidos de la consulta (QUERY) y pasar a Javascript el archivo
3 Agregar los datos a la Datatable para mostrarlos
Código: Seleccionar todo
<script>
function Load() {
JMsgPrompt( "Numero de Registros", readrows, '', 'numero de registros' );
}
function readrows( rows ) {
let param = {};
param.rows = rows;
param.file = './data/result_query.json' <-- nombre del archivo JSON que se va crear
MsgServer( 'srv_tweb.php', result_server, param );
}
Código: Seleccionar todo
<?php
include( 'config.php' );
include( 'config_db.php' );
include( TWEB_PATH . 'tmysql.php');
$rows = filter_post( "rows", 0 );
$file = filter_post( "file", './query.json' );
$aRet = loadDatos( NOTAS, NOTAS_DETALLE, $rows, $file );
die( json_encode( $aRet ) );
//----------------------------------
function loadDatos( $notas, $notas_detalle, $rows, $filejson ) {
$sql = "SELECT a.folio,
(SELECT b.nombre
FROM $notas AS b
WHERE a.folio = b.folio
LIMIT 1) AS nombre,
a.codigo,
a.descripcion,
a.cantidad,
a.prec_unit,
a.importe
FROM $notas_detalle AS a
ORDER BY a.folio
LIMIT $rows";
$conex = new TMysql( DB_SERVER, DB_USER, DB_PSW, DB_DATABASE );
$aRet = [];
$aRow = [];
if ( $conex->query($sql) ) {
while ( $row = $conex->getrow() ) {
$aRow[] = [ 'folio' => $row['folio'],
'nombre' => $row['nombre'],
'codigo' => $row['codigo'],
'descripcion' => $row['descripcion'],
'cantidad' => $row['cantidad'],
'precio' => $row['prec_unit'],
'importe' => $row['importe'] ];
}
// Aqui creamos el archivo JSON con los datos que nos devuelve el servidor
$fp = fopen($filejson, 'w');
fwrite($fp, json_encode($aRow));
fclose($fp);
$aRet = [ 'result' => true, 'data' => $filejson ];
} else {
$aRet = [ 'result' => false ];
}
$conex->close();
return $aRet;
}
?>
Código: Seleccionar todo
<script>
function result_server( respond ) {
if (respond.result) {
fileJson = respond.data;
let oCtrl = new TControl();
let oGrid = oCtrl.GetControl( 'myTable' );
oGrid.setJsonfile( fileJson );
} else {
MsgNotify('No hay datos para mostrar', 'info', true);
}
}
Link del Test con array-request JSON Test del Link