Help Sql somma orari

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
le clausole where devono essere uguali nelle due query, altrimenti il rischio é quello di ottenere totali differenti dalla lista degli elementi, quindi meglio definire 1 sola variabile e 1 sola array

questo x verifica
PHP:
<?php
error_reporting(-1);

require_once 'myUtils/show_vars.php';

$data_da           = "2023-01-02";
$data_a            = "2023-01-22";
$componente        = 123456789;
$stampo            = "stampo1";
$analisi           = "analisi1";
$tipo_manutenzione = "tipo_manutenzione1";


$query_dinamica = "";
$parametri = array();

if (($data_da != "" ) && ($data_a != "" )) {
    $query_dinamica .= " and (data_intervento BETWEEN ? and ?)";
    $parametri[] = $data_da;
    $parametri[] = $data_a;
}

if ($componente != "" )  {
    $query_dinamica .= " and id_parte_intervento = ?";
    $parametri[] = $componente;
}

if ($stampo != "" )  {
    $query_dinamica .= " and id_stampo_intervento = ?";
    $parametri[] = $stampo;
}

if ($analisi != "" )  {
    $query_dinamica .= " and id_analisi_p_l = ?";
    $parametri[] = $analisi;
}
 
if ($tipo_manutenzione != "" )  {
    $query_dinamica .= " and id_tipo_intervento = ?";
    $parametri[] = $tipo_manutenzione;
}

$sql2 = "SELECT * FROM ( "
      . "SELECT 1 AS posizione,"
      . "I.id_intervento,"
      . "I.id_op_intervento,"
      . "I.id_stampo_intervento,"
      . "I.id_analisi_p_l,"
      . "I.stato_intervento,"
      . "I.data_intervento,"
      . "I.durata_intervento,"
      . "dipendenti.cognome_dipendente,"
      . "dipendenti.nome_dipendente,"
      . "stampi.part_number_macchina,"
      . "stampi.descrizione_macchina,"
      . "causale_intervento.descr_causale,"
      . "componenti_stampi.descrizione_componente,"
      . "tipo_manutenzione.descr_tipo_manutenzione,"
      . "analisi_p_livello.descrizione "
      . "from interventi AS I "
      . "LEFT JOIN dipendenti ON I.id_op_intervento=dipendenti.id_dipendente "
      . "LEFT JOIN stampi ON I.id_stampo_intervento=stampi.id_macchina "
      . "LEFT JOIN causale_intervento ON I.id_causale_intervento=causale_intervento.id_causale "
      . "LEFT JOIN componenti_stampi ON I.id_parte_intervento=componenti_stampi.id_componente "
      . "LEFT JOIN tipo_manutenzione ON I.id_tipo_intervento=tipo_manutenzione.id_tipo_manutenzione "
      . "LEFT JOIN analisi_p_livello ON I.id_analisi_p_l=analisi_p_livello.id_valore "
      . "where 1=1 " . $query_dinamica

      . " UNION ALL"
       
      . " SELECT 2 AS posizione,"
      . " count(*) as id_intervento,"
      . " ' ' as data_intervento,"
      . " ' ' as id_op_intervento,"
      . " ' ' as id_stampo_intervento,"
      . " ' ' as id_analisi_p_l,"
      . " ' ' as stato_intervento,"          
      . " SEC_TO_TIME(SUM(TIME_TO_SEC(F.durata_intervento))) AS tot_durata,"
      . " ' ' as cognome_dipendente,"
      . " ' ' as nome_dipendente,"
      . " ' ' as part_number_macchina,"
      . " ' ' as descrizione_macchina,"
      . " ' ' as descr_causale,"
      . " ' ' as descrizione_componente,"
      . " ' ' as descr_tipo_manutenzione,"
      . " ' ' as descrizione "
      . "from interventi AS F "
      . "LEFT JOIN dipendenti ON F.id_op_intervento=dipendenti.id_dipendente "
      . "LEFT JOIN stampi ON F.id_stampo_intervento=stampi.id_macchina "
      . "LEFT JOIN causale_intervento ON F.id_causale_intervento=causale_intervento.id_causale "
      . "LEFT JOIN componenti_stampi ON F.id_parte_intervento=componenti_stampi.id_componente "
      . "LEFT JOIN tipo_manutenzione ON F.id_tipo_intervento=tipo_manutenzione.id_tipo_manutenzione "
      . "LEFT JOIN analisi_p_livello ON F.id_analisi_p_l=analisi_p_livello.id_valore "
      . " where 1=1 ". $query_dinamica . ")t ORDER BY posizione";

echo "<h3>parametri</h3>".show_var( $parametri )."<br />";

echo $query_dinamica;

//echo $sql2;

//    $query2 = $dbh -> prepare($sql2);                                  
//    $query2->execute($parametri);
//    $results2=$query2->fetchAll(PDO::FETCH_OBJ);

die;

1674468036683.png
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
ti conviene modificare le "if" in questo modo

PHP:
if (!empty($data_da) && !empty($data_a)) {

perché se una voce non é definita, questo é il risultato
PHP Notice: Undefined variable: componente in C:\We.......
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
Buongiorno Marino, ho modificato tutto come mi hai suggerito, ma niente da fare... e non riesco davvero a capire il motivo. Le variabili sono valorizzate, se eseguo la query senza parametri (1=1) funziona tutto correttamente, nel momento in cui inserisco un parametro, non ne vuol sapere. La query che viene prodotta è la seguente (stampata con echo):
PHP:
SELECT * FROM ( SELECT 1 AS posizione,I.id_intervento,I.id_op_intervento,I.id_stampo_intervento,
               I.id_analisi_p_l,I.stato_intervento,I.data_intervento,I.durata_intervento,
               dipendenti.cognome_dipendente,dipendenti.nome_dipendente,
               stampi.part_number_macchina,stampi.descrizione_macchina,
               causale_intervento.descr_causale,componenti_stampi.descrizione_componente,
               tipo_manutenzione.descr_tipo_manutenzione,analisi_p_livello.descrizione
               from interventi AS I
               LEFT JOIN dipendenti ON I.id_op_intervento=dipendenti.id_dipendente
               LEFT JOIN stampi ON I.id_stampo_intervento=stampi.id_macchina
               LEFT JOIN causale_intervento ON I.id_causale_intervento=causale_intervento.id_causale
               LEFT JOIN componenti_stampi ON I.id_parte_intervento=componenti_stampi.id_componente
               LEFT JOIN tipo_manutenzione ON I.id_tipo_intervento=tipo_manutenzione.id_tipo_manutenzione
               LEFT JOIN analisi_p_livello ON I.id_analisi_p_l=analisi_p_livello.id_valore
               where 1=1 and (data_intervento BETWEEN ? and ?)
               UNION ALL
               SELECT 2 AS posizione, count(*) as id_intervento, ' ' as data_intervento,
               ' ' as id_op_intervento, ' ' as id_stampo_intervento, ' ' as id_analisi_p_l,
               ' ' as stato_intervento, SEC_TO_TIME(SUM(TIME_TO_SEC(F.durata_intervento))) AS tot_durata,
               ' ' as cognome_dipendente, ' ' as nome_dipendente, ' ' as part_number_macchina,
               ' ' as descrizione_macchina, ' ' as descr_causale, ' ' as descrizione_componente,
               ' ' as descr_tipo_manutenzione, ' ' as descrizione
               from interventi AS F
               LEFT JOIN dipendenti ON F.id_op_intervento=dipendenti.id_dipendente
               LEFT JOIN stampi ON F.id_stampo_intervento=stampi.id_macchina
               LEFT JOIN causale_intervento ON F.id_causale_intervento=causale_intervento.id_causale
               LEFT JOIN componenti_stampi ON F.id_parte_intervento=componenti_stampi.id_componente
               LEFT JOIN tipo_manutenzione ON F.id_tipo_intervento=tipo_manutenzione.id_tipo_manutenzione
               LEFT JOIN analisi_p_livello ON F.id_analisi_p_l=analisi_p_livello.id_valore
               where 1=1 and (data_intervento BETWEEN ? and ?))t ORDER BY posizione

 $query2 = $dbh -> prepare($sql2);                                     
   $query2->execute($parametri);
   $results2=$query2->fetchAll(PDO::FETCH_OBJ);

sembrerebbe tutto ok. Se faccio l'echo della variabile vedo i dati 2023-01-01/2023-01-10 ma la mia tabella rimane vuota.

Tabella:

HTML:
                     <td><?php  echo htmlentities($row2->part_number_macchina);?></td>
                    <td><?php  echo htmlentities($row2->descrizione_macchina);?></td>
                    <td><?php  echo htmlentities($row2->descr_causale);?></td>
                    <td><?php  echo htmlentities($row2->descrizione_componente);?></td>
                    <td><?php  echo htmlentities($row2->descr_tipo_manutenzione);?></td>
                    <td><?php  echo htmlentities($row2->data_intervento);?></td>
                    <td><?php  echo htmlentities($row2->durata_intervento);?></td>
                    <td><?php  echo htmlentities($row2->descrizione);?></td>
                    <td><?php  echo htmlentities($row2->stato_intervento);?></td>
                    <td><?php  echo htmlentities($row2->esito_intervento);?></td>

Non mi va di romperti le scatole continuamente, di solito non lo faccio... ma ora è una questione di principio... Se hai tempo....help me

Grazie infinite
E
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
prova sostituendo ed inserendo i valori direttamente nella query (tra apici)

data_intervento BETWEEN ? and ?

con

data_intervento BETWEEN '2023-01-01' and '2023-01-10'

guarda anche se c'é qualche messaggio nel log di php

ps, esito_intervento non é nella query

se poi ti é possibile estrai alcuni dati significativi e mandali
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
prova sostituendo ed inserendo i valori direttamente nella query (tra apici)

data_intervento BETWEEN ? and ?
Se sostituisco alla query dinamica i valori come da te suggerito funziona perfettamente. C'è qualcosa che non va nei parametri, ma onestamente sto per perdere le speranze (anche se mi rode). Il log non mi da nessuna anomalia.
if (($data_da != "" ) && ($data_a != "" )) { $query_dinamica .= " and (data_intervento BETWEEN ? and ?)"; $parametri[] = $data_da; $parametri[] = $data_a; } if ($componente != "" ) { $query_dinamica .= " and id_parte_intervento = ?"; $parametri[] = $componente; } if ($stampo != "" ) { $query_dinamica .= " and id_stampo_intervento = ?"; $parametri[] = $stampo; } if ($analisi != "" ) { $query_dinamica .= " and id_analisi_p_l = ?"; $parametri[] = $analisi; } if ($tipo_manutenzione != "" ) { $query_dinamica .= " and id_tipo_intervento = ?"; $parametri[] = $tipo_manutenzione; }
Scrivendo i parametri in questo modo non mi funziona proprio niente... UFFFFFF... che dici abbandono? faccio a meno di questa ricerca? o possiamo provare altro? onestamente sto nel pallone!!!!
ps, esito_intervento non é nella query
Si lo sapevo, ma questo al momento è l'ultimo dei problemi...

Se hai ancora un po di pazienza sono qui...altrimenti ti ringrazio comunque infinitamente.

E
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
data_intervento BETWEEN '2023-01-01' and '2023-01-10'
hai scritto che così funziona

ora prova così
"and data_intervento BETWEEN '" . $data_da . "' and '" . $data_a . "'"

stampa la query e vediamo che sia scritta bene
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
data_intervento BETWEEN '2023-01-01' and '2023-01-10'
hai scritto che così funziona

ora prova così
"and data_intervento BETWEEN '" . $data_da . "' and '" . $data_a . "'"

stampa la query e vediamo che sia scritta bene
Avevo già provato...e se non ricordo male funzionava...ma non ne sono certo (ho fatto centinaia di test),appena rientro faccio un test e ti aggiorno con l'output. Grazie infinite
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
Cosi funziona.

PHP:
 if (!empty($data_da) && !empty($data_a)) {
      $query_dinamica.=" and data_intervento between '". $data_da."' and '". $data_a."'";
      $parametri[] = $data_da;
      $parametri[] = $data_a;
      echo '<script>alert("data")</script>';    
  }

Query stampata:

SQL:
SELECT * FROM ( SELECT 1 AS posizione,
I.id_intervento,
I.id_op_intervento,
I.id_stampo_intervento,
I.id_analisi_p_l,
I.stato_intervento,
I.data_intervento,
I.durata_intervento,
dipendenti.cognome_dipendente,
dipendenti.nome_dipendente,
stampi.part_number_macchina,
stampi.descrizione_macchina,
causale_intervento.descr_causale,
componenti_stampi.descrizione_componente,
tipo_manutenzione.descr_tipo_manutenzione,
analisi_p_livello.descrizione
from interventi AS I
LEFT JOIN dipendenti ON I.id_op_intervento=dipendenti.id_dipendente
LEFT JOIN stampi ON I.id_stampo_intervento=stampi.id_macchina
LEFT JOIN causale_intervento ON I.id_causale_intervento=causale_intervento.id_causale
LEFT JOIN componenti_stampi ON I.id_parte_intervento=componenti_stampi.id_componente
LEFT JOIN tipo_manutenzione ON I.id_tipo_intervento=tipo_manutenzione.id_tipo_manutenzione
LEFT JOIN analisi_p_livello ON I.id_analisi_p_l=analisi_p_livello.id_valore where 1=1 and data_intervento between '2023-01-01' and '2023-01-06'
UNION ALL
SELECT 2 AS posizione, count(*) as id_intervento,
 ' ' as data_intervento,
' ' as id_op_intervento,
 ' ' as id_stampo_intervento,
' ' as id_analisi_p_l,
' ' as stato_intervento,
 SEC_TO_TIME(SUM(TIME_TO_SEC(F.durata_intervento))) AS tot_durata,
 ' ' as cognome_dipendente,
' ' as nome_dipendente,
' ' as part_number_macchina,
' ' as descrizione_macchina,
' ' as descr_causale,
' ' as descrizione_componente,
' ' as descr_tipo_manutenzione,
' ' as descrizione
from interventi AS F
LEFT JOIN dipendenti ON F.id_op_intervento=dipendenti.id_dipendente
LEFT JOIN stampi ON F.id_stampo_intervento=stampi.id_macchina
LEFT JOIN causale_intervento ON F.id_causale_intervento=causale_intervento.id_causale
LEFT JOIN componenti_stampi ON F.id_parte_intervento=componenti_stampi.id_componente
LEFT JOIN tipo_manutenzione ON F.id_tipo_intervento=tipo_manutenzione.id_tipo_manutenzione
LEFT JOIN analisi_p_livello ON F.id_analisi_p_l=analisi_p_livello.id_valore
where 1=1 and data_intervento between '2023-01-01' and '2023-01-06')t ORDER BY posizione
 
Ultima modifica di un moderatore:

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
ora sostituisci così

PHP:
 if (!empty($data_da) && !empty($data_a)) {
      $query_dinamica.=" and data_intervento between ? and ? ";
      $parametri[] = $data_da;
      $parametri[] = $data_a;
      echo '<script>alert("data")</script>';    
  }

ed esegui con

PHP:
$query2 = $dbh -> prepare($sql2);                                    
$query2->execute($parametri);
$results2=$query2->fetchAll(PDO::FETCH_OBJ);

ps stampa la query e var_dump dei parametri
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
ps stampa la query e var_dump dei parametri
Var_dump array:
Codice:
array(2) { [0]=> string(10) "2023-01-01" [1]=> string(10) "2023-01-26" }

Query:
SQL:
SELECT * FROM ( SELECT 1 AS posizione,I.id_intervento,I.id_op_intervento,I.id_stampo_intervento,I.id_analisi_p_l,I.stato_intervento,I.data_intervento,I.durata_intervento,dipendenti.cognome_dipendente,dipendenti.nome_dipendente,stampi.part_number_macchina,stampi.descrizione_macchina,causale_intervento.descr_causale,componenti_stampi.descrizione_componente,tipo_manutenzione.descr_tipo_manutenzione,analisi_p_livello.descrizione from interventi AS I LEFT JOIN dipendenti ON I.id_op_intervento=dipendenti.id_dipendente LEFT JOIN stampi ON I.id_stampo_intervento=stampi.id_macchina LEFT JOIN causale_intervento ON I.id_causale_intervento=causale_intervento.id_causale LEFT JOIN componenti_stampi ON I.id_parte_intervento=componenti_stampi.id_componente LEFT JOIN tipo_manutenzione ON I.id_tipo_intervento=tipo_manutenzione.id_tipo_manutenzione LEFT JOIN analisi_p_livello ON I.id_analisi_p_l=analisi_p_livello.id_valore where 1=1 and data_intervento between ? and ? UNION ALL SELECT 2 AS posizione, count(*) as id_intervento, ' ' as data_intervento, ' ' as id_op_intervento, ' ' as id_stampo_intervento, ' ' as id_analisi_p_l, ' ' as stato_intervento, SEC_TO_TIME(SUM(TIME_TO_SEC(F.durata_intervento))) AS tot_durata, ' ' as cognome_dipendente, ' ' as nome_dipendente, ' ' as part_number_macchina, ' ' as descrizione_macchina, ' ' as descr_causale, ' ' as descrizione_componente, ' ' as descr_tipo_manutenzione, ' ' as descrizione from interventi AS F LEFT JOIN dipendenti ON F.id_op_intervento=dipendenti.id_dipendente LEFT JOIN stampi ON F.id_stampo_intervento=stampi.id_macchina LEFT JOIN causale_intervento ON F.id_causale_intervento=causale_intervento.id_causale LEFT JOIN componenti_stampi ON F.id_parte_intervento=componenti_stampi.id_componente LEFT JOIN tipo_manutenzione ON F.id_tipo_intervento=tipo_manutenzione.id_tipo_manutenzione LEFT JOIN analisi_p_livello ON F.id_analisi_p_l=analisi_p_livello.id_valore where 1=1 and data_intervento between ? and ? )t ORDER BY posizione

Tutto assurdo... è la prima volta che mi incarto per una cosa del genere. Ho sempre effettuato query per range di date, ma le query erano molto più semplici e gestibili.... Ora mi sono perso definitivamente...
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
mi sembra che la query e relativi parametri sia giusta,
manca
I.data_intervento between ? and ?
ma il campo pare essere univoco altrimenti darebbe errore,

prova a controllare bene gli errori e vedi che ci sia
error_reporting(-1);
 
Discussioni simili
Autore Titolo Forum Risposte Data
D help, ruotare dati riga a colonna da tabella sql PHP 2
M help query sql Database 3
M Help for Linux Bash Programmazione 1
P Passare i risultati di un foreach in un modal. Help! PHP 2
J help me C/C++ 1
K Help: problema con uno script di booking in php! PHP 0
Q HELP ME PLEASE!‼️‼️ E-Commerce 1
L difficoltà con Xampp. printing php mancante...help Web Server 6
K [PHP] Help me a problem... Pleases PHP 1
S Problemi con modulo upload video php (help!) PHP 0
M HELP FORM CREATO IN PHP PHP 14
M Help - consultare (ed esportare) dati da un DB pubblico mySql PHP 2
S [PHP] help me!! PHP 2
F Cerco contatto tipo help-desk Offerte e Richieste di Lavoro e/o Collaborazione 2
F Help-PDO copiare Database MySQL PHP 3
Andrea1981 [WordPress] [HTML] Help modifica credits nel footer.Tema Customizr. WordPress 5
simgia [Javascript] Google maps help! Javascript 1
S [WordPress] Footer php - il background riempie tutta la pagina - help WordPress 1
A funzioni asincrone e callback...help! Ajax 10
F Help array da javascript a php Javascript 2
M [PHP] Help: controllo valori inseriti in un campo PHP 1
P Help con js/php PHP 6
N Sistema di Help di Delphi 7 non funziona su Win10 Windows e Software 0
silvia88 ***Help*** - Anteprima immagine photoshop diversa da file Photoshop 3
A HELP: vedo il sito posizionato in serp solo con i tool di posizionamento!!! SEO e Posizionamento 3
T [PHP] Calcolo anzianità soggetti [era: Help me :( Esercizio per me impossibile] PHP 9
trattorino Creare codice php help PHP 26
CoyotesSon [PHP] Help! Creazione di una finestra PHP 5
V help java Java 2
L help me Presentati al Forum 0
L N00b need help Webdesign e Grafica 2
I Help - Problema installazione tema di themeforest WordPress 1
claudiav ciao!! help.. Presentati al Forum 0
Z Invio mail da telecamere HIKVision - HELP!!! IP Cam e Videosorveglianza 0
M - WordPress - Sito Annunci HELP ME!!!! :crying: WordPress 2
L Hosting, help HTML e CSS 2
M HoneyPot su macchina virtuale HELP ME PLEASE!!! Reti LAN e Wireless 0
F Help con leaseweb Hosting 2
M DropDownList HELP ASP.NET 8
E [Javascript] help me !!! array da php a java Javascript 9
N Query lenta, help ! MySQL 0
P Help! modifica script Javascript 11
R cookies policy - help Leggi, Normative e Fisco 21
I Piccolo roblema di compatibilità mobile.. help! PHP 1
zorro Help paginazione PHP 10
A Help! Creare un blog/portale con chat in real time WordPress 0
P help variabile js concatenata a echo php Javascript 0
O Help, devo fare un sito web con alcune caratteristiche... HTML e CSS 2
Alessandra Fanelli Menu Collapse- help -nn iserisce azioni a pulsanti Flash 0
M php help ! PHP 3

Discussioni simili