Newsgroup: it.comp.lang.perl
Titolo: PERL E DB

Ciao a tutti!
sono un progranmmatore Perl alle prime armi.
Ho un problema con l'estrazione di dati da un db per il mio lavoro.
In Perl ho creato una funzione, soprannominata "annuario", che riporta
i dati di una serie di servizi gestiti dalla ditta in cui lavoro.
Il problema è il seguente:
L'annuario, di default, estrae i dati mese per mese una struttura come
di seguito:
data     | colonna1     | colonna2     | colonna3     | colonna4     |
ecc...
Ogni riga è un MESE.
Per data si intende msee(1,2,3,4,...) e anno(2003, 3004, ...).
la visualizzazzione si piò cambiare da un form sul lato Top della
pagina, selezionando, dalla rispettive combo, anno e mese di INIZIO e
anno e mese di  FINE.
Il PROBLEMA viene quando di tenta di estrarre i dati, per esempio, dal
Gennaio 2002 al Aprile 2003.
IO DEVO RIUSCIRE A FAR VISUALIZZARE ANCHE I PERIODI A CAVALLO TRA DUE
ANNI, E ANCHE PER PIU' DI 12 RICHE (1 per mese), QUINDI PER ESEMPIO DA
GEN 2002 A APRILE 2003, ECC...
Riporto di seguito il codice dell'estrazione dati dal DB usata ora
(per estrarre "1 anno" [Gennaio - Dicembre 2003, ...] alla volta).
######################## FORM SU TOP PAGINA ################
sub stat_anno_online()
{
$htm_top = qq~
<form name="form1" method="post" action="/cgi-bin/
pag.pl
">
<input type="hidden" name="menu" value="anno">
  <table border="0" cellpadding="0" cellspacing="2" align="center"
width=50%>
    <tr> 
      <td bgcolor="#C0C0C0" align="left" width="24%" colspan="4">
      <font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Riferimento</font>
      </td>
      <td bgcolor="#C0C0C0" align="left" > 
        Dal:
        <select name="mese_inizio">
		<option value=1 selected>Gennaio
		<option value=2>Febbraio
		<option value=3>Marzo
		<option value=4>Aprile
		<option value=5>Maggio
		<option value=6>Giugno
		<option value=7>Luglio
		<option value=8>Agosto
		<option value=9>Settembre
		<option value=10>Ottobre
		<option value=11>Novembre
		<option value=12>Dicembre
	</select>
	<select name="anno_inizio">
		<option value=2002>2002
		<option value=2003 selected>2003
		<option value=2004>2004
	</select>
	</td>
	<td bgcolor="#C0C0C0" align="left" >
	Al:
	<select name="mese_fine">
		<option value=1>Gennaio
		<option value=2>Febbraio
		<option value=3>Marzo
		<option value=4>Aprile
		<option value=5>Maggio
		<option value=6>Giugno
		<option value=7>Luglio
		<option value=8>Agosto
		<option value=9>Settembre
		<option value=10>Ottobre
		<option value=11>Novembre
		<option value=12 selected>Dicembre
	</select>
	<select name="anno_fine">
		<option value=2002>2002
		<option value=2003 selected>2003
		<option value=2004>2004
	</select>
	</td>
    </tr>
    <tr> 
      <td colspan="4" bgcolor="#C0C0C0" align="center"> 
        <div align="left"><font face="Verdana, Arial, Helvetica,
sans-serif" size="2">
          </font> <font face="Verdana, Arial, Helvetica, sans-serif"
size="2"><a href="$url_action">HOME</a>
          </font></div>
      </td>
      <td colspan="4" bgcolor="#C0C0C0" align="center"> 
          <input type="submit" name="Submit" value="Visualizza">
      </td>
    </tr>
  </table>
</form>
~;
return $htm_top;
}
############################################################
if ( $mm1 ne "")
 {	
 	$mm1 = $q->param('mese_inizio');
 }
else
 {
 	$mm1 = 1;	
 }
if ( $mm2 ne "")
 {	
 	$mm2 = $q->param('mese_fine');	
 }
else
 {
 	$mm2 =12;
 }
if ( $aa1 ne "")
 {	
 	$anno = $q->param('anno_inizio');	
 }
else
 {
 	$anno = 2003;
 	$aa1 = 2003;
 }
 
if ( $aa2 ne "")
 {	
 	$anno = $q->param('anno_fine');
 }
else
 {
 	$anno = 2003;
 	$aa2 = 2003;	
 } 
if ( $mm1 < 4 && $aa1 eq 2002 || $mm2 < 4 && $aa2 eq 2002 )
 {	
 	mess_errori()
  }
for(my $pmese=$mm1;$pmese<=$mm2;$pmese++){
 
  $par_anno = $anno;
   my $dbh = apri_db();
 
   my $query = "select  *   from stat_email ";
 
   if ( $pmese  ne ""){	
 	$query .= "  WHERE  DATE_FORMAT(DATA, '%c') = '$pmese'";
   }
 
   if ( $par_anno  ne ""){	
 	$query .= "  AND DATE_FORMAT(DATA, '%Y') ='$par_anno'";
   }
 
   $query .= " ORDER BY DATA DESC ";
Spero di essere stato abbastanza chiaro.
Ho bisogno di consigli al più presto da tutti coloro che pensano di
potermi aiutare in qualsiasi modo!
Grazie anticipate a tutti coloro che mi rispondono
by Lorenzo
lorenzo...@email.it

Spero di essere stato abbastanza chiaro.
Se avessi la pazienza di leggere non so quante (non ho avuto la pazienza di
contarle) righe di codice, probabilmente sì, ma mi pare una pretesa
eccessiva (tra l'altro, se avessi la suddetta pazienza, non sarei forse
qui). Per come stanno le cose, preferirei che tu specificassi il problema
con parole tue, e postassi eventualmente solo il codice minimo che serve (e
quello completo, non come questo che si interrompe sul più bello).
Ciao.