Visualizzazione query

di il
18 risposte

Visualizzazione query

Buongiorno,
sto creando un file php con il quale interrogo SQL Server.
Dal file php ho bisogno di eseguire una qry che da come risultato una serie di valori, es:

SELECT COUNT(Num_Doc) AS [Documenti presenti], Serie_Doc, MIN(Num_Doc) AS [Primo Num_Doc trovato], MAX(Num_Doc) AS [Ultimo Num_Doc trovato]
FROM db.tbl
GROUP BY Serie_Doc;
--> Avrò dunque per n serie presenti, un totale, un massimo e un minimo
serie | totale | max | min
0 | 10 | 10 |1
1 | 5 | 5 |1
....

Sto provando a impostare un foglio di stile per visualizzare questi dati, più o meno come nella foto
Cattura2.PNG
Cattura2.PNG

questo è il risultato finale che vorrei ottenere, che quindi il nodo venga ripetuto per ogni sezionale presente.
Questo è il codice che ho scritto:

echo "<div class='BODY'>
      <div class='SEZIONALE'>
              <table style='width:50%'>
 		  <tr>
    		     <td>Sezionale:</td>
    		     <td><b>[b]$sezionale[/b]</b></td>
                  </tr>
               </table>
       </div>
                
       <div class='TOTALE_SEZIONALE' style='width:50%'>
                <table style='width:50%'>
 			<tr>
    			    <td><i>Totale fatture:</i></td>
    			    <td><b>[b]$totFatt[/b]</b></td>
                         </tr>
                </table>
	</div>
                &nbsp;
	 <div class='QUANTITA'>
                   <table style='width:100%'>
 			<tr>
    			     <td><i>Primo NUM_DOC trovato:</i></td>
    			     <td><b>[b]$primoNum[/b]</b></td>
    						
                         </tr>
                         <tr>
                            <td><i>Ultimo NUM_DOC trovato:</i></td>
                            <td><b>[b]$ultimoNum[/b]</b></td>
                          </tr>
                    </table>
				</div>  
			</div>";
Purtroppo però non so come gestire le variabili.... per l'esempio che ho allegato ho inserito io manualmente il codice due volte inserendo i dati.

Pensavo di fare come segue:

$qry="SELECT COUNT(Num_Doc), Serie_Doc, MIN(Num_Doc), MAX(Num_Doc) FROM db.tbl GROUP BY Serie_Doc";
Però non credo si corretto...

Non so se mi sono spiegata...

Grazie,
Sara
Allegati:
26510_af553777a588238416caa4b5870d7bae.png
26510_af553777a588238416caa4b5870d7bae.png

18 Risposte

  • Re: Visualizzazione query

    Ciao,
    cicli la query e ti costruisci la tabella. Con echo la restituisci.

    Ciao
  • Re: Visualizzazione query

    Ciao!
    Con "cicli la query" cosa intendi? Usare FOR o IF?

    io faccio una query iniziale per trovarmi tutte le serie presenti nella tabella cosi:
    
    $qrySerie = "SELECT Serie_Doc FROM tbl GROUP BY Serie_Doc;";
    
    ogni cliente può avere più o meno serie.

    Facciamo come esempio che qui ne ho 2 (serie 0 e serie1).

    Ho bisogno di visualizzare questo
    Cattura.PNG
    Cattura.PNG

    con i valori della serie 0 (come nella foto) e subito sotto i valori della serie 1 nello stesso formato.

    Per ottenere quello della foto ho fatto cosi (premetto che ho inserito manualmente la condizione WHERE Serie_Doc = 0, e i valori xxx riguardano campi che ancora devo sistemare):
    
    $tbl = "dbo.tbl";
    $sql = "SELECT COUNT(Num_Doc) AS [Documenti_presenti], Serie_Doc, MIN(Num_Doc) AS [Primo_Num_Doc_trovato], MAX(Num_Doc) AS [Ultimo_Num_Doc_trovato] FROM ".$tbl." WHERE Serie_Doc = 0 GROUP BY Serie_Doc;";
    					
    $risultato = sqlsrv_query($conn, $sql);
    while($row=sqlsrv_fetch_array($risultato))
    	{echo "<div class='BODY'>
    			<div class='SEZIONALE'>
    				<table style='width:56%'>
    					<tr><td>Sezionale:</td><td><b>".$row['Serie_Doc']."</b></td></tr>
    				</table>
    			</div>
    					
    			<div class='TOTALE_SEZIONALE'>
    				<table style='width:61%'>
    					<tr><td><i>Totale fatture:</i></td><td><b>".$row['Documenti_presenti']."</b></td></tr>
    				</table>
    			</div>
    			&nbsp;
    			<div class='QUANTITA'>
    				<table style='width:100%'>
    					 <tr><td><i>Primo NUM_DOC trovato:</i></td><td><b>".$row['Primo_Num_Doc_trovato']."</b></td>
    						<td><i>Documenti mancanti:</i></td><td><b>xxx</b></td></tr>
    					 <tr><td><i>Ultimo NUM_DOC trovato:</i></td><td><b>".$row['Ultimo_Num_Doc_trovato']."</b></td>
    						<td><i>Documenti duplicati:</i></td><td><b>xxx</b></td></tr>
    				 </table>
    			 </div>
    					
    			 <div class='DETTAGLIO'><p><i>dettaglio in coda al presente documento</i></p></div>    
    		</div>";
    	  }
    
    Quindi devo fare un ciclo FOR prima di questo codice giusto?
    cioè
    
    $qrySerie = "SELECT Serie_Doc FROM tbl GROUP BY Serie_Doc;";
    for(...)  -> richiamo $qrySerie
    {
    il codice di sopra...
    }
    
    Sarebbe corretto così?
    Nel caso lo fesse come devo impostare il ciclo FOR?

    Sara
  • Re: Visualizzazione query

    Ciao,
    ti ho fatto vedere l'esempio nell'altro post.

    Il while del risultato della query.

    Il FOR non lo puoi usare perchè non sai il numero di elementi.

    Ciao
  • Re: Visualizzazione query

    Fammi capire.... Tu vuoi visualizzare il contenuto della query?

    Il COUNT conta ti dice quanti record.

    Quindi se vuoi dare il numero di record fai una query che conta e in testata visualizzi il numero tot di fatture.

    Poi fai una seconda query per il contenuto della tabella.

    Oppure fai una stored procedure che imposti come vuoi e passi i parametri in base a come ti servono.

    Ciao,
  • Re: Visualizzazione query

    Il mio problema adesso non è il totale delle fatture bensì ripetere
    Sezionale(=serie) / Totale fatture / Primo Num / Ultimo Num / Mancanti / Duplicati
    tante volte quante sono le serie presenti.

    Quindi nel caso ipotetico di 2 serie dovrò visualizzare:
    Sezionale: 0
    Totale fatture: 10
    Primo Num: 1
    Ultimo Num: 6
    Mancanti: 0
    Duplicati: 4

    Sezionale: 1
    Totale fatture: 5
    Primo Num: 1
    Ultimo Num: 4
    Mancanti: 1
    Duplicati: 0

    Pensavo magari di fare una query COUNT(Serie) il cui risultato lo dichiaro con la variabile $totSeriePresenti, poi fare il ciclo
    
    FOR($i= "?"; $<=$totSeriePresenti; $++)
    {
    qui inserisco le query per tirarmi fuori gli altri dati ed echo che avevo scritto nel messaggio precedente
    } 
    
    Potrebbe essere fattibile?

    Sara
  • Re: Visualizzazione query

    sdc98 ha scritto:


    Il mio problema adesso non è il totale delle fatture bensì ripetere
    Sezionale(=serie) / Totale fatture / Primo Num / Ultimo Num / Mancanti / Duplicati
    tante volte quante sono le serie presenti.

    Quindi nel caso ipotetico di 2 serie dovrò visualizzare:
    Sezionale: 0
    Totale fatture: 10
    Primo Num: 1
    Ultimo Num: 6
    Mancanti: 0
    Duplicati: 4

    Sezionale: 1
    Totale fatture: 5
    Primo Num: 1
    Ultimo Num: 4
    Mancanti: 1
    Duplicati: 0

    Pensavo magari di fare una query COUNT(Serie) il cui risultato lo dichiaro con la variabile $totSeriePresenti, poi fare il ciclo
    
    FOR($i= "?"; $<=$totSeriePresenti; $++)
    {
    qui inserisco le query per tirarmi fuori gli altri dati ed echo che avevo scritto nel messaggio precedente
    } 
    
    Potrebbe essere fattibile?

    Sara
    Se questi dati lì prendi dal risultato di una SQL. Fai un WHILE.

    Invece del FOR utilizza il FOREACH!

    Ciao
  • Re: Visualizzazione query

    Buongiorno,
    alla fine ho risolto così:
    
    $sql = "SELECT COUNT(Num_Doc) AS [Documenti_presenti], Serie_Doc, MIN(Num_Doc) AS [Primo_Num_Doc_trovato], MAX(Num_Doc) AS [Ultimo_Num_Doc_trovato] FROM ".$tbl."  GROUP BY Serie_Doc;";
    					
    			$risultato = sqlsrv_query($conn, $sql);
    			while($row=sqlsrv_fetch_array($risultato))
    				{			
    					$serie=$row['Serie_Doc'];
    					$docPresenti=$row['Documenti_presenti'];
    					$primoNum=$row['Primo_Num_Doc_trovato'];
    					$ultimoNum=$row['Ultimo_Num_Doc_trovato'];
    					
    					$dupl = "SELECT SUM([Documenti duplicati]) AS somma
    						FROM(SELECT A.[Serie_Doc], A.[Num_Doc], COUNT(A.[Num_Doc])-1 as [Documenti duplicati]
    						FROM ".$tbl." AS A
    						GROUP BY A.[Num_Doc], A.[Serie_Doc]
    						HAVING COUNT(*) > 1) Duplicati
    						WHERE Serie_Doc = ".$serie."
    						GROUP BY [Serie_Doc];";
    					$risultatoDuplicati = sqlsrv_query($conn, $dupl);
    					while($row=sqlsrv_fetch_array($risultatoDuplicati))
    						{
    							$sommaDupl= $row['somma'];
    						}
    					
    					
    					echo "<div class='BODY'>
    							<div class='SEZIONALE'>
    								<table style='width:56%'>
    									<tr>
    										<td>Sezionale:</td>
    										<td><b>$serie</b></td>
    									</tr>
    								</table>
    							</div>
    						
    							<div class='TOTALE_SEZIONALE'>
    								<table style='width:61%'>
    									<tr>
    										<td><i>Totale fatture:</i></td>
    										<td><b>$docPresenti</b></td>
    									</tr>
    								</table>
    							</div>
    						&nbsp;
    							<div class='QUANTITA'>
    								<table style='width:100%'>
    									 <tr>
    										<td><i>Primo NUM_DOC trovato:</i></td>
    										<td><b>$primoNum</b></td>
    										<td><i>Documenti mancanti:</i></td>
    										<td><b>xxx</b></td>
    									 </tr>
    									 <tr>
    										<td><i>Ultimo NUM_DOC trovato:</i></td>
    										<td><b>$ultimoNum</b></td>
    										<td><i>Documenti duplicati:</i></td>
    										<td><b>$sommaDupl</b></td>
    									  </tr>
    								</table>
    							</div>
    							
    							<div class='DETTAGLIO'>
    								<p><i>dettaglio in coda al presente documento</i></p>
    							</div>    
    						</div>";
    				}
    
    Devo ancora inserire il totale dei documenti mancanti che per il momento ho segnato con xxx.

    L'unico problema del codice qui sopra è che per i duplicati se un sezionale non ne ha, invece di mettere 0 legge e riporta il valore del sezionale prima....
    La query che uso è:
    
    SELECT SUM([Documenti duplicati]) AS somma
    FROM(SELECT A.[Serie_Doc], A.[Num_Doc], COUNT(A.[Num_Doc])-1 as [Documenti duplicati]
    FROM tbl AS A
    GROUP BY A.[Num_Doc], A.[Serie_Doc]
    HAVING COUNT(*) > 1) Duplicati
    GROUP BY [Serie_Doc];
    
    Come devo modificarla affinchè mi visualizzi anche i valori a 0?

    Grazie,
    Sara
  • Re: Visualizzazione query

    Se mi posti il risultato della query.... Forse è meglio.

    Ciao
  • Re: Visualizzazione query

    Having > 1 cosa fa?
  • Re: Visualizzazione query

    Ciao!
    Io devo convertire tutto questo file php in un pdf da codice.
    Come posso fare?

    Grazie,
    Sara
    Allegati:
    26510_8f29e52a298be7b84ee545a656a951ec.png
    26510_8f29e52a298be7b84ee545a656a951ec.png

    26510_fc28155d4222f0a738d6544de160ffa6.png
    26510_fc28155d4222f0a738d6544de160ffa6.png

    26510_af6b66f49881bdbcf53e9b0b1c995470.png
    26510_af6b66f49881bdbcf53e9b0b1c995470.png
  • Re: Visualizzazione query

    cali ha scritto:


    Having > 1 cosa fa?
    Era proprio questo il problema!
    L'ho tolto e adesso mi visualizza anche i sezionali con 0.

    Sara
  • Re: Visualizzazione query

    Ciao!
    Devo convertire questo file php in un pdf.
    Come posso fare?

    Grazie,
    Sara.
  • Re: Visualizzazione query

    sdc98 ha scritto:


    cali ha scritto:


    Having > 1 cosa fa?
    Era proprio questo il problema!
    L'ho tolto e adesso mi visualizza anche i sezionali con 0.

    Sara
    La mia domanda non era casuale!

    Te l'ho posta... per fartici arrivare da sola!
  • Re: Visualizzazione query

    sdc98 ha scritto:


    Ciao!
    Devo convertire questo file php in un pdf.
    Come posso fare?

    Grazie,
    Sara.
    Ci sono librerie gratuite....


    Oppure puoi far decidere all'utente di scaricarsi la tabella che gli visualizzi. Puoi utilizzare datatable: https://datatables.net

    Dipende come vuoi lavorare!

    Ciao
Devi accedere o registrarti per scrivere nel forum
18 risposte