problema recupero valori array

$dati = mysql_query("SELECT * FROM prenotazioni where id='$id' ");
WHILE($row = mysql_fetch_assoc($dati)){

$quantita[] = $row[qta];
$data[] = $row[data];
}

//qui chiudo il while ora mi serve poter recuperare tutti i valori contenuti nell'array

o ancora meglio

if(in_array($tisdata, $data){
$ok = $quantita;       //valore dell'array

prativamente devo stampare a video un calendario e sotto il rispettivo giorno (se esiste) devo stampare il valore della quantita

spero possiate aiutarmi, grazie mille

inviato 8 anni fa
yusizu
X 0 X

Ciao,

il codice corretto dovrebbe essere questo:

$dati = mysql_query("SELECT * FROM prenotazioni where id='$id' ");
$i = 0;
WHILE($row = mysql_fetch_assoc($dati)){
  $quantita[$i] = $row[qta];
  $data[$i] = $row[data];
  $i = $i +1;
}

In questo modo ottieni 2 array (uno quantità e uno data) con lo stesso indice.

Per stamparli tutti ti basterà creare un semplice ciclo for come il seguente:

for ($i = 0; $i < count($quantita); $i++) {

  echo "Data: ".$data[$i]." - quantità: ".$quantita[$i];

}

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

diciamo che vabe se non fosse che mi recupera solo una riga della tabella, io avrei bisogno di recuperarmi la somma delle quantita dove la data che stampo è uguale a quella presente nel db

risposto 8 anni fa
yusizu
X 0 X

Ciao,

ops... mi era sfuggita la condizione " id='$id' ". Pardon!

Potresti essere un po' più preciso magari scrivendo la struttura della tabella da cui vorresti recuperare i dati che ti interessano?

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

in tabella ho :

id, nome, data_dal, data_al, qta

$e = 0;
$dati = mysql_query("SELECT * FROM tabella  where nome=\"$nome\"  ");
WHILE($row = mysql_fetch_assoc($dati)){

$data[$e] = $row[dal_data];
$datb[$e] = $row[al_data];
$quantita[$e] = $row[qta];
$id[$e] = $row[id];
$e++;
}




for($i = 1; $i<$giorni+$primo_lunedi; $i++){
for ($e = 0; $e < count($id); $e++) {


if($i%$colonne+1==0){
print("<tr>");
}
if($i<$primo_lunedi){
print("<td> </td>");
}
else{
$giorno_= $i-($primo_lunedi-1);
$a = strtotime(date($anno_."-".$mese_."-".$giorno_));
$tisdata = date("Y-m-d", $a);
$b = strtotime(date("Y-m-d"));

 


if(in_array($tisdata, $data) || in_array($tisdata, $datb)){
 
 
 
 $ok="$quantita[$e]<br>";
  


}else{
  $ok ="";

}

if($a != $b){


print("<td><a class='days' href=\"?x=".$a."\">".$giorno_."</a><br><span class=button>$ok</span></td>");

}
else{
print("<td><a class='today' href=\"?x=".$a."\"><b>".$giorno_."</b></a><span class=button>$ok[$e]</span></td>");


}}
}
if($i%$colonne==31){
print("</tr>");
}
}


print("</table>");
}

come puoi vedere ho un altro ciclo for che mi stampa a video i giorni del mese e, sotto ogni giorrno, se è soddisfatta in_array(tisdata, $data) mi dovrebbe stampare la SOMMA delle quantita inserite nelle varie riche della tabella...

spero di essermi spiegato...credimi non è molto semplice

grazie mile

risposto 8 anni fa
yusizu
X 0 X

Quindi se non ho capito male ti servono i totali di certi campi, calcolati per data, giusto?

Se è così allora potresti risolvere tutto nella query, che dovrebbe essere del tipo

SELECT campo_data, SUM(campo_da_sommare) FROM ... WHERE ... GROUP BY campo_data

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Gianni mi spiace contraddirti ma non è così semplice almeno x 2 motivi:

1 i campi data in realtà sono due (dal_data e al_data) quindi va da sè che non posso fare Goup by...

2) io a video visuializzo un calendario scorrevole per mese con tutti i giorni del mese e sotto ogni giorno dovrei visualizzare la somma della quantita

del tipo:

Gennaio 2008

=> Calendario:        123456789101112131415161718192021222324252627282930

=>Quantita(somma)000000030000050000800000000600000070000000800009000

Forse dovrei fare un explode delle date contenute nel db e fare la query in base al giorno, se uguale al relativo stampato a video

bho...crdimi è un bel rompicapo.

Cmq è sempre quel famoso calendario che col tuo aiuto avevo inpostato sotto la relativa data la checkbox...ora invece devo visualizzare la qta (o meglio la somma visto che le righe per quelle date potrebbero essere diverse)

grazie mille

risposto 8 anni fa
yusizu
X 0 X

Ciao yusizu,

ieri sera ho provato ad abbozzare una soluzione al tuo problema riscrivendo il codice che avevi postato e sperando di aver capito il problema...

Il ragionamento è: parto dalla stampa del calendario e per ogni giorno eseguo la query che fa una somma del campo quantità soddisfando la condizione nome='$nome' e che la data possa essere uguale al valore "dal_data" o "al_data".

Spero che sia la soluzione corretta... altrimenti ti chiederei gentilmente un'ulteriore spiegazione.

Buona giornata e grazie

 :bye:

Zeta

# nuova versione
for($i = 1; $i<$giorni+$primo_lunedi; $i++){

  if($i%$colonne+1==0){ print("<tr>"); }

  if($i<$primo_lunedi){ print("<td> </td>"); } 
  else 
  {
    $giorno_= $i-($primo_lunedi-1);
    $a = strtotime(date($anno_."-".$mese_."-".$giorno_));
    $tisdata = date("Y-m-d", $a);
    $b = strtotime(date("Y-m-d"));
    
    $dati = mysql_query("SELECT SUMU(qta) as qta FROM tabella where nome=\"$nome\" AND (dal_data = '".$tisdata."' OR al_data = '".$tisdata."')");
    $row = mysql_fetch_assoc($dati);

    $ok = "";
    if ($row["qta"] > 0) {
   $ok =$row["qta"]."<br>";
    }

    if($a != $b){
       print("<td><a class='days' href=\"?x=".$a."\">".$giorno_."</a><br><span class=button>$ok</span></td>");

    } else {
       print("<td><a class='today' href=\"?x=".$a."\"><b>".$giorno_."</b></a><span class=button>$ok</span></td>");
    }
  } // end if 

  if($i%$colonne==31){ print("</tr>"); }
} // end for
risposto 8 anni fa
zeta80
X 0 X

La query è sbagliata, $tisdata deve essere compreso tra i campi dal_data e al_data, non uguale ad essi.

Ma comunque è un approccio poco efficiente perché richiede l'esecuzione di una trentina di query. Sarebbe meglio recuperare con una sola query tutti i record che hanno "al_data" o "dal_data" nel mese corrente e che quindi concorrono alla somma delle presenze.

Oltre a questo array di record devi costruire un array con i giorni del mese, da utilizzare per sommare le prezenze. A questo punto devi ciclare sull'array dei giorni e, per ogni giorno, ciclare sull'array dei record, per vedere quale di questi aggiunge presenze al giorno corrente e in caso positivo sommare le prezsenze. Si tratta quindi di fare 2 cicli annidati.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni,

scusami ma allora non avevo proprio capito il problema di partenza...

Perdona la mia ignoranza

Buona giornata

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

La query è sbagliata, $tisdata deve essere compreso tra i campi dal_data e al_data, non uguale ad essi.

Ma comunque è un approccio poco efficiente perché richiede l'esecuzione di una trentina di query. Sarebbe meglio recuperare con una sola query tutti i record che hanno "al_data" o "dal_data" nel mese corrente e che quindi concorrono alla somma delle presenze.

Oltre a questo array di record devi costruire un array con i giorni del mese, da utilizzare per sommare le prezenze. A questo punto devi ciclare sull'array dei giorni e, per ogni giorno, ciclare sull'array dei record, per vedere quale di questi aggiunge presenze al giorno corrente e in caso positivo sommare le prezsenze. Si tratta quindi di fare 2 cicli annidati.

 :bye:

Gentilissimo Gianni saresti così disponibile da postarmi un pò di codice..io già mi perdo di mio nei cicli, figuriamoci in quelli annidati....

Spero voglia aiutarmi, un salutone e grazie ancora.

risposto 8 anni fa
yusizu
X 0 X

up pls... :(

risposto 8 anni fa
yusizu
X 0 X

qualcuno sa dirmi almeno come posso fare a recuperare tutti i giorni che intercorrono tra una data ed un'altra nel db?

es. nel db:

dal                        al

2008-02-02        2008-02-06

come faccio ad ottenere e poi stampare un array che abbia come valori :

2008-02-02 2008-02-03 2008-02-04 2008-02-05 2008-02-06

....mi serve per poter controllare che la data odierna sia tra queste e se c'è mi dovrebbe riportare il valore corrispondente nel db....

,......praticamente un bel rompicapo....cmq se qualcuno volesse aiutarmi...sono ancora in tempo x modificare la sistemazione dei dati nel db...

grazie mille :(

risposto 8 anni fa
yusizu
X 0 X
# nuova versione
for($i = 1; $i<$giorni+$primo_lunedi; $i++){

  if($i%$colonne+1==0){ print("<tr>"); }

  if($i<$primo_lunedi){ print("<td> </td>"); } 
  else 
  {
    $giorno_= $i-($primo_lunedi-1);
    $a = strtotime(date($anno_."-".$mese_."-".$giorno_));
    $tisdata = date("Y-m-d", $a);
    $b = strtotime(date("Y-m-d"));
    
    $dati = mysql_query("SELECT SUMU(qta) as qta FROM tabella where nome=\"$nome\" AND (dal_data <= '".$tisdata."' AND al_data <= '".$tisdata."')");
    $row = mysql_fetch_assoc($dati);

    $ok = "";
    if ($row["qta"] > 0) {
   $ok =$row["qta"]."<br>";
    }

    if($a != $b){
       print("<td><a class='days' href=\"?x=".$a."\">".$giorno_."</a><br><span class=button>$ok</span></td>");

    } else {
       print("<td><a class='today' href=\"?x=".$a."\"><b>".$giorno_."</b></a><span class=button>$ok</span></td>");
    }
  } // end if 

  if($i%$colonne==31){ print("</tr>"); }
} // end for

Questa è la versione con la query corretta... L'algoritmo è poco performante  come detto da Gianni, ma restituisce i risultati corretti  O0

Penserò con calma ad un'altra possibile soluzione!

Buona giornata

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

purtroppo non funziona, mi restituisce sempre 1 somma sotto i vari giorni, non distingue ciò che gli passo a video nè l'intervallo di tempo

io sono arrivato a stampare i giorni che mi interessano con l'equivalente qta:

del tipo;

dal 2008-02-03  al 2008-02-05 (qta 5)

ed ottengo col codice sotto:

03  04  05

5    5     5

il problema è che essendo in un ciclo while per recuperare tutte le quantità in effetti se ho una situazione del genere:

dal 2008-02-03  al 2008-02-05 (qta 5)

dal 2008-02-04  al 2008-02-05 (qta 3)

03  04  05 04  05

5    5     5   3    3

invece di:

03  04  05

5     8    8

che è giusto ma graficamente sicuramente da migliorare, come faccio a far uscire solo i giorni interessati e sotto "la somma" delle varie quantità relative a quel giorno?

  $dati = mysql_query("SELECT * FROM tabella WHERE  id='$id AND dal_data <= '$tisdata'  AND al_data >='$tisdata' ORDER BY dal_data");
    WHILE($row = mysql_fetch_array($dati)){

for($i = strtotime($row[dal_data]); $i<=strtotime($row[al_data]); $i = strtotime("+1 day",$i)){
$date=array();
   $date[] = date('d-m-Y',$i);
  }  
  
for($i = 1; $i<$giorni+$primo_lunedi; $i++){

  if($i%$colonne+1==0){ print("<tr>"); }

  if($i<$primo_lunedi){ print("<td> </td>"); } 
  else 
  {
    $giorno_= $i-($primo_lunedi-1);
    $a = strtotime(date($anno_."-".$mese_."-".$giorno_));
    $tisdata = date("Y-m-d", $a);
    $b = strtotime(date("Y-m-d"));
    
    $dati = mysql_query("SELECT * FROM tabella WHERE  id='$id AND (dal_data <= '".$date[0]."' OR al_data >= '".$date[0]."')");
    WHILE($row2 = mysql_fetch_assoc($dati)){
   $qta = array();
   $qta[] = $row2[qta];

for($i = strtotime($row2[dal_data]); $i<=strtotime($row2[al_data]); $i = strtotime("+1 day",$i)){
$date=array();
   $date[] = date('d',$i);

 
   echo"<td>".$date[0]."<BR>";
   echo$qta[0]."</td>";
}

grazie mille

risposto 8 anni fa
yusizu
modificato 8 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda