claudio.bizzarri
New member
Buongiorno,
so che le stored procedure non sono supportate per ovvi motivi.
Sto utilizzando una procedura che mi estrae una tabella "pivot": chiamando questa procedura con una call viene restituito un array di array con diversi elementi, l'ultimo dei quali è di fatto una tabella in sola lettura. Ho già scritto il codice php per estrarre questi valori, quindi di fatto ho un array da visualizzare come se fosse il risultato di una query. Volendo nell'array c'è anche la query, generata dalla procedura, che serve per stampare la tabella pivot, quindi potrebbe essere sufficiente una procedura che visualizza una query (non posso fare la vista perché questa query calcolata varia di giorno in giorno, a seconda della data).
Vorrei aggiungere una pagina con il risultato di questa call: qual è la via più "lineare" per poter avere una tabella simile a quelle già esistenti? Prendo una pagina esistente e copio le classi oppure c'è una funzione a cui posso passare un array per averlo stampato in sola lettura? O magari c'è una funzione php a cui passare una query per avere il risultato in tabella?
La pagina custom per il momento contiene questo codice:
[pre]
if(!defined('custom_page_from_inclusion')) { die(); }
$_cp_sql = "CALL Pivot('dati_totali', 'stato', 'd1', 1, 'WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day)', '');";
$_cp_stmt=$conn->query($_cp_sql);
do {
$_cp_rows = $_cp_stmt->fetchAll();
if ($_cp_rows) {
print_r($_cp_rows);
}
} while ($_cp_stmt->nextRowset());
[/pre]
ed il risultato è il seguente
[pre]
Array
(
[0] => Array
(
[@stmt] => SELECT GROUP_CONCAT(CONCAT('SUM(IF(d1 = ', '"', val, '"', ', 1, 0)) AS ', '"', val, '"') SEPARATOR ",
") INTO @sums FROM ( SELECT DISTINCT d1 AS val FROM dati_totali WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day) ORDER BY 1 ) AS top
[0] => SELECT GROUP_CONCAT(CONCAT('SUM(IF(d1 = ', '"', val, '"', ', 1, 0)) AS ', '"', val, '"') SEPARATOR ",
") INTO @sums FROM ( SELECT DISTINCT d1 AS val FROM dati_totali WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day) ORDER BY 1 ) AS top
)
)
Array
(
[0] => Array
(
[@stmt2] => SELECT stato,
SUM(IF(d1 = "2019-06", 1, 0)) AS "2019-06",
SUM(IF(d1 = "2019-07", 1, 0)) AS "2019-07",
SUM(IF(d1 = "2019-08", 1, 0)) AS "2019-08",
SUM(IF(d1 = "2019-09", 1, 0)) AS "2019-09",
SUM(1) AS Total
FROM dati_totali WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day) GROUP BY stato
WITH ROLLUP
[0] => SELECT stato,
SUM(IF(d1 = "2019-06", 1, 0)) AS "2019-06",
SUM(IF(d1 = "2019-07", 1, 0)) AS "2019-07",
SUM(IF(d1 = "2019-08", 1, 0)) AS "2019-08",
SUM(IF(d1 = "2019-09", 1, 0)) AS "2019-09",
SUM(1) AS Total
FROM dati_totali WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day) GROUP BY stato
WITH ROLLUP
)
)
Array
(
[0] => Array
(
[stato] =>
[0] =>
[2019-06] => 3
[1] => 3
[2019-07] => 3
[2] => 3
[2019-08] => 3
[3] => 3
[2019-09] => 2
[4] => 2
[Total] => 11
[5] => 11
)
[1] => Array
(
[stato] => IN GESTIONE
[0] => IN GESTIONE
[2019-06] => 5
[1] => 5
[2019-07] => 17
[2] => 17
[2019-08] => 12
[3] => 12
[2019-09] => 7
[4] => 7
[Total] => 41
[5] => 41
)
[2] => Array
(
[stato] => PERSO - DEFLOTTAMENTO
[0] => PERSO - DEFLOTTAMENTO
[2019-06] => 3
[1] => 3
[2019-07] => 3
[2] => 3
[2019-08] => 1
[3] => 1
[2019-09] => 3
[4] => 3
[Total] => 10
[5] => 10
)
[3] => Array
(
[stato] =>
[0] =>
[2019-06] => 11
[1] => 11
[2019-07] => 23
[2] => 23
[2019-08] => 16
[3] => 16
[2019-09] => 12
[4] => 12
[Total] => 62
[5] => 62
)
)
[/pre]
so che le stored procedure non sono supportate per ovvi motivi.
Sto utilizzando una procedura che mi estrae una tabella "pivot": chiamando questa procedura con una call viene restituito un array di array con diversi elementi, l'ultimo dei quali è di fatto una tabella in sola lettura. Ho già scritto il codice php per estrarre questi valori, quindi di fatto ho un array da visualizzare come se fosse il risultato di una query. Volendo nell'array c'è anche la query, generata dalla procedura, che serve per stampare la tabella pivot, quindi potrebbe essere sufficiente una procedura che visualizza una query (non posso fare la vista perché questa query calcolata varia di giorno in giorno, a seconda della data).
Vorrei aggiungere una pagina con il risultato di questa call: qual è la via più "lineare" per poter avere una tabella simile a quelle già esistenti? Prendo una pagina esistente e copio le classi oppure c'è una funzione a cui posso passare un array per averlo stampato in sola lettura? O magari c'è una funzione php a cui passare una query per avere il risultato in tabella?
La pagina custom per il momento contiene questo codice:
[pre]
if(!defined('custom_page_from_inclusion')) { die(); }
$_cp_sql = "CALL Pivot('dati_totali', 'stato', 'd1', 1, 'WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day)', '');";
$_cp_stmt=$conn->query($_cp_sql);
do {
$_cp_rows = $_cp_stmt->fetchAll();
if ($_cp_rows) {
print_r($_cp_rows);
}
} while ($_cp_stmt->nextRowset());
[/pre]
ed il risultato è il seguente
[pre]
Array
(
[0] => Array
(
[@stmt] => SELECT GROUP_CONCAT(CONCAT('SUM(IF(d1 = ', '"', val, '"', ', 1, 0)) AS ', '"', val, '"') SEPARATOR ",
") INTO @sums FROM ( SELECT DISTINCT d1 AS val FROM dati_totali WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day) ORDER BY 1 ) AS top
[0] => SELECT GROUP_CONCAT(CONCAT('SUM(IF(d1 = ', '"', val, '"', ', 1, 0)) AS ', '"', val, '"') SEPARATOR ",
") INTO @sums FROM ( SELECT DISTINCT d1 AS val FROM dati_totali WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day) ORDER BY 1 ) AS top
)
)
Array
(
[0] => Array
(
[@stmt2] => SELECT stato,
SUM(IF(d1 = "2019-06", 1, 0)) AS "2019-06",
SUM(IF(d1 = "2019-07", 1, 0)) AS "2019-07",
SUM(IF(d1 = "2019-08", 1, 0)) AS "2019-08",
SUM(IF(d1 = "2019-09", 1, 0)) AS "2019-09",
SUM(1) AS Total
FROM dati_totali WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day) GROUP BY stato
WITH ROLLUP
[0] => SELECT stato,
SUM(IF(d1 = "2019-06", 1, 0)) AS "2019-06",
SUM(IF(d1 = "2019-07", 1, 0)) AS "2019-07",
SUM(IF(d1 = "2019-08", 1, 0)) AS "2019-08",
SUM(IF(d1 = "2019-09", 1, 0)) AS "2019-09",
SUM(1) AS Total
FROM dati_totali WHERE greatest(`fine_contratto`,`prolungamento`) between now() and (now() + interval 90 day) GROUP BY stato
WITH ROLLUP
)
)
Array
(
[0] => Array
(
[stato] =>
[0] =>
[2019-06] => 3
[1] => 3
[2019-07] => 3
[2] => 3
[2019-08] => 3
[3] => 3
[2019-09] => 2
[4] => 2
[Total] => 11
[5] => 11
)
[1] => Array
(
[stato] => IN GESTIONE
[0] => IN GESTIONE
[2019-06] => 5
[1] => 5
[2019-07] => 17
[2] => 17
[2019-08] => 12
[3] => 12
[2019-09] => 7
[4] => 7
[Total] => 41
[5] => 41
)
[2] => Array
(
[stato] => PERSO - DEFLOTTAMENTO
[0] => PERSO - DEFLOTTAMENTO
[2019-06] => 3
[1] => 3
[2019-07] => 3
[2] => 3
[2019-08] => 1
[3] => 1
[2019-09] => 3
[4] => 3
[Total] => 10
[5] => 10
)
[3] => Array
(
[stato] =>
[0] =>
[2019-06] => 11
[1] => 11
[2019-07] => 23
[2] => 23
[2019-08] => 16
[3] => 16
[2019-09] => 12
[4] => 12
[Total] => 62
[5] => 62
)
)
[/pre]