Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Confronto tra date e query

    Salve a tutti.

    Ho una tabella con i campi id | struttura | periodo_in | periodo_out | numero

    Da questa tabella dovrei recuperare il campo numero per una determinata data ed associarlo alla data in questione in caso contrario viene riportato un numero impostato precedentemente (0 per esempio)

    ho pensato alla seguente funzione

    while ($row =
    mysql_fetch_array($result_disponibilita)) {
    $periodo_in = $row["periodo_in"];
    $periodo_out = $row["periodo_out"];
    $numero = $row["numero"];
    if ($data >= $periodo_in and $data <= $periodo_out) {
    $numero=$numero;
    } else {
    $numero=0;
    }
    }

    Il problema nasce se per la medesima struttura sono presenti due o più record.
    Usando la funzione precedente mi recupera sempre la variabile numero associata all'ultimo record mentre avrei la necessità che, per fare un esempio, se ho la $data 15/03/2009 e nel database sono presenti due record con le seguenti variabili come da tabella sopra riportata

    id | struttura | periodo_in | periodo_out | numero

    1 | pinco | 20090310 | 20090318 | 4
    2 | pinco | 200903125 | 20090328 | 2

    mi venga visualizzato a video il numero 4 e non, invece, il numero 2 del secondo record

    Spero di essermi spiegato

  2. #2
    Devi salvare il campo 'numero' all'interno di un vettore e non dentro una semplice variabile.
    Ad esempio il codice potrebbe essere questo:

    $i = 0;
    while ($row =
    mysql_fetch_array($result_disponibilita)) {
    $periodo_in[$i] = $row["periodo_in"];
    $periodo_out[$i] = $row["periodo_out"];
    $numero[$i] = $row["numero"];
    $i ++;
    }
    for ($i = 0; $i < mysql_num_rows($result_disponibilita); $i++) {
    if ($data[$i] <= $periodo_in[$i] and $data[$i] => $periodo_out[$i]) {
    $numero[i]=0;
    }
    }

    In questo caso non hai bisogno di un else, in quanto devi agire solo nel caso in cui venga rispettato l'if. Spero di esserti stato d'aiuto, ciao.
    Here Comes The Music Ecstasy

  3. #3
    Ho provato ad utilizzare il tuo codice ma ricevo una serie di errori....

    forse sbaglio ad implementarlo

    $sql_disponibilita = "select * from incoming_disponibilita where struttura='$riferimento' and alloggio='$id' and periodo_in like '$anno$m%'";
    $result_disponibilita = mysql_query($sql_disponibilita) or die ("Couldn't execute SQL DISPONIBILITA");
    if (mysql_num_rows($result_disponibilita) > 0) {
    $i = 0;
    while ($row =
    mysql_fetch_array($result_disponibilita)) {
    $periodo_in[$i] = $row["periodo_in"];
    $periodo_out[$i] = $row["periodo_out"];
    $numero[$i] = $row["numero"];
    $i ++;
    }
    for ($i = 0; $i < mysql_num_rows($result_disponibilita); $i++) {
    if ($data >= $periodo_in[$i] and $data <= $periodo_out[$i]) {
    $numero=$numero[i];
    }
    }

    L'errore che ricevo è questo

    Fatal error: Unsupported operand types in .... on line 180

    Alla riga 180 ho il seguente codice $aa1=$numero-$numero_alloggi;

    che dovrebbe sottrarre dal numero ricavato dalla query precedente la variabile numero alloggi... credo che l'errore possa dipendere dalla variabile $numero in quanto a video il suo risultato è "array"

  4. #4
    Prova con print_r($numero) e vedi cosa ti restituisce a video.
    Here Comes The Music Ecstasy

  5. #5
    Mi da questo errore

    Array ( [0] => 4 )
    Fatal error: Unsupported operand types in ... on line 186

    Ho anche provato a modificare il codice così:

    $sql_disponibilita = "select * from incoming_disponibilita where struttura='$riferimento' and alloggio='$id' and periodo_in like '$anno$m%'";
    $result_disponibilita = mysql_query($sql_disponibilita) or die ("Couldn't execute SQL DISPONIBILITA");
    if (mysql_num_rows($result_disponibilita) > 0) {


    $temp=array();

    while ($row =
    mysql_fetch_array($result_disponibilita)) {
    $temp[] = $row;
    }

    recuperando così tutti i valori della query. Solo per visualizzare il risultato e vedere se li recuperava ho usato ils eguente ciclo... in effetti li recupera ma non capisco perché me li fa vedere doppi

    foreach($temp as $valori){
    foreach($valori as $valore){
    echo $valore." ";
    }
    echo "
    \n";
    }


    Ti riassumo il problema... ho la seguente tabella

    id | struttura | periodo_in | periodo_out | numero

    1 | pinco | 20090310 | 20090318 | 4
    2 | pinco | 200903125 | 20090328 | 2

    quelo che dovrei fare è recuperare quindi tutti record di una determinata struttura e confrontare che ogni giorno del mese sia compreso tra periodo_in e periodo_out e in caso affermativo stampare a video la variabile $numero (questo anche se nel database per la stessa struttura sono presenti più record.. quindi riferito all'esempio sopra per la struttura pinco nel periodo dal 10 al 18 stampa a video 4 e dal 25 al 28 stampa 2

  6. #6
    Te li fà vedere doppi perchè probabilmente necessiti di un solo foreach:
    foreach($temp as $valori){
    echo $valori." ";
    echo "
    \n";
    }
    Prova a vedere se così te li stampa ugualmente. Se puoi incollami anche l'output della query. Ciao.
    Here Comes The Music Ecstasy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.