se può esserti utile, questo mi funziona alla perfezione.
javascript:
codice:
$('#my_table').dataTable({
// NOMI DEI CAMPI DELLE TABELLE SQL
"columns": [
{"data": "cliente_codice"},
{"data": "cliente_ragsoc"},
{"data": "cliente_mnemonico"},
{"data": "cliente_piva"},
{"data": "cliente_email"},
{"data": "cliente_attivato"}
],
"processing": true,
"serverSide": true,
"ajax": 'clienti_admin.php'
});
questo il php:
Codice PHP:
$connessione = Connessione::getInstance();
$clienti = new Clienti($connessione);
// PRENDO IL NUMERO TOTALE DI RECORD PER PAGINAZIONE
$recordsTotal = count($clienti->getByTipo('CL'));
// VARIABILI GET DA DATATABLES
$columns = $_GET['columns'];
$search = $_GET['search']['value'];
$start = $_GET['start'];
$length = $_GET['length'];
$draw = $_GET["draw"];
$orderByColumnIndex = $_GET['order'][0]['column'];
$orderBy = $_GET['columns'][$orderByColumnIndex]['data'];
$orderType = $_GET['order'][0]['dir'];
// CONTROLLO SE LA CASELLA DI RICERCA È VUOTA
if (!empty($search)) {
for ($i = 0; $i < count($columns); $i++) {
$column = $_GET['columns'][$i]['data'];
$where[] = "$column like '%" . $search . "%'";
}
// CONCATENO LA WHERE
$where = "WHERE cliente_clde = 'CL' AND (" . implode(" OR ", $where) . ")";
// QUERY SENZA LIMIT PER CONTARE IL NUMERO DI RECORD TROVATI
$cmdNoLimit = 'SELECT cliente_codice, cliente_ragsoc, cliente_mnemonico, cliente_piva, cliente_email, cliente_attivato ';
$cmdNoLimit .= 'FROM clienti ' . $where;
$recordsFiltered = count($clienti->getGeneric($cmdNoLimit));
// QUERY CON WHERE E LIMIT
$cmd = 'SELECT cliente_codice, cliente_ragsoc, cliente_mnemonico, cliente_piva, cliente_email, cliente_attivato ';
$cmd .= 'FROM clienti ' . $where . ' ORDER BY cliente_codice ' . $orderType . ' LIMIT ' . $start . ',' . $length;
} else {
// QUERY SENZA FILTRI
$cmd = 'SELECT cliente_codice, cliente_ragsoc, cliente_mnemonico, cliente_piva, cliente_email, cliente_attivato ';
$cmd .= 'FROM clienti WHERE cliente_clde = "CL" ORDER BY ' . $orderBy . ' ' . $orderType . ' LIMIT ' . $start . ',' . $length;
$recordsFiltered = $recordsTotal;
}
// ESEGUO LA QUERY INVIATA COME STRINGA
$rows = $clienti->getGeneric($cmd);
$data = array();
foreach ($rows as $var) {
$data[] = $var;
}
$res = array(
"draw" => $draw,
"recordsTotal" => $recordsTotal,
"recordsFiltered" => $recordsFiltered,
"data" => $data
);
echo json_encode($res);
l'ho commentato per le info generiche.
dovresti solo sostituire:
- nel js i nomi dei campi delle tabelle
- nel php le select e le funzioni per estrarre i dati dal db
spero possa essere utile a qualcuno perchè alla fine non si è rivelato così banale.