Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    query su date a cavallo tra un anno ed un altro non va

    Ho questa query:
    Codice PHP:
    $result mysql_query("SELECT * FROM `offerte` WHERE ('$currentmonth' BETWEEN MONTH(`data_in`) AND MONTH(`data_out`)) AND '$currentyear' <= YEAR(`data_out`) AND `data_out` >= '$today' AND `id_hotel` = '$idh' AND `show_hide` != '$sh' ORDER BY `hotel_pos`,`inter_pos`,`data_in` ASC");
    while (
    $row mysql_fetch_array($result)) { 
    che però non funziona quando il periodo in esame è a cavallo tra un anno ed un altro.
    Faccio un esempio:
    diciamo che un offerta inizia il 15-12-2010 e finisce il 15-01-2011, quindi se nella query la variabile $currentmonth è dicembre o gennaio, risulta compresa nel periodo di validità dell'offerta, e dovrebbe mostrarmi nel risultato della query anche questa offerta.
    Invece, se inizio e fine dell'offerta sono nell'ambito dello stesso anno, va tutto ok, ma se - come nel caso - si estendono da un anno al successivo, la query non mi restituisce il risultato.
    Eppure, scrivendo ... AND '$currentyear' <= YEAR(`data_out`) ... dovrei comprendere tutti i risultati in cui l'anno di fine offerta è superiore o uguale all'anno corrente!
    Allora, perchè non va?
    metatad
    graphic & web design

  2. #2
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Scusa, ma perchè non fai i confronti sulla data completa invece che spezzarla in tanti AND?
    La query sarebbe più semplice e più veloce

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Beh, a parte AND `data_out` >= '$today' , che effettivamente è ridondante (ed infatti, nel frattempo l'ho tolto...), gli AND sulla data sono solo due, e non vedo come potrei riunirli in un solo confronto, visto che devono rilevare cose diverse.
    O forse il caldo agostano mi ottenebra la mente a tal punto...
    metatad
    graphic & web design

  4. #4
    Originariamente inviato da metatad
    Beh, a parte AND `data_out` >= '$today' , che effettivamente è ridondante (ed infatti, nel frattempo l'ho tolto...), gli AND sulla data sono solo due, e non vedo come potrei riunirli in un solo confronto, visto che devono rilevare cose diverse.
    O forse il caldo agostano mi ottenebra la mente a tal punto...
    se le date sono nel formato DATE (yyyy-mm-dd) e non varchar e' sufficiente usare la data intera.

    .... where '$tua_data' between data_in AND data_out

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    le date sono (ovviamente) nel formato DATE, ma non mi risolve, usare la data intera...
    Se faccio:
    Codice PHP:
     $oggi explode("-",$today); 
    $mydata $oggi[0] . "-" $currentmonth "-" $oggi[2]; 
    $result mysql_query("SELECT * FROM `offerte` WHERE ('$mydata' BETWEEN `data_in` AND `data_out`) AND `show_hide` != '$sh' GROUP BY `id_hotel` ORDER BY `hotel_pos`,`inter_pos`,`data_in` ASC LIMIT $fromlimit,$tolimit"); 
    continua a non visualizzarmi le offerte che si accavallano tra un anno e l'altro...
    metatad
    graphic & web design

  6. #6
    al posto di data_in e data_out, devi scriverci delle date....

  7. #7
    va beh .... ma se non stampi il contenuto delle variabili quello che hai postato non ha alcun significato.

    Prova a stampare la query od almeno la variabile $mydata.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    la variabile $mydata, come si evince dal codice postato, viene composta prendendo giorno ed anno correnti, ed inserendo come mese quello selezionato dall'utente per la query (la variabile $currentmonth).
    @ samleo: mi sa che non hai compreso bene di che si parla... se devo effettuare una query al db, quello che mi serve è che mi venga restituito l'elenco dei record che corrispondono ad una precisa condizione. Quindi, non posso "mettere delle date", laddove questi sono i valori contenuti nel db, e che determinano la corrispondenza o meno con la condizione richiesta...
    metatad
    graphic & web design

  9. #9
    Misà che tu invece non hai capito bene il funzionamento di BETWEEN.


    Guarda quest'esempio.

    Codice PHP:
    SELECT FROM table WHERE data_db BETWEEN `2010-08-15` AND `2010-08-19
    Verranno fuori tutti i record dove il CAMPO data_db sarà compreso tra il 15 e il 19 Agosto.

    Non solo uno cerca di aiutare, ma si ha anche l'arroganza di rispondere " che non si è capito bene di che cosa si parla" -_-

    Allora la prossima volta risolvilo da solo...non venire a postare sul forum!

    Eccheccaspita!

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    @samleo: stai calmino... riguardati quello che hai scritto nel primo post, e ti accorgerai da solo dell'errore...
    al posto di data_in e data_out, devi scriverci delle date....
    Quello che scrivi adesso, è l'esatto contrario. Nel primo caso, infatti, suggerivi di cercare il match tra la variabile e due date prestabilite (cosa del tutto inutile, se non impossibile), mentre adesso suggerisci di cercare nel db una data compresa tra le due date. Cosa diversa, fattibile, ma che non c'entra nulla con quello che serve a me.
    Provo a rispiegarmi, fossi stato incomprensibile sinora...
    L'utente seleziona un mese (ad es. agosto), e di conseguenza vede tutte le offerte che comprendono il mese di agosto (indipendentemente da quando inziano e finiscono, purchè almeno alcuni giorni siano nel mese di agosto).
    Quindi, quello che mi serve, è una query che verifica se il mese selezionato è compreso tra la data d'inizio e quella di termine di ciascuna offerta registrata nel db.
    Tutto questo, con il mio sistema, funziona perfettamente: il problema sorge, come spiegavo, soltanto quando il periodo dell'offerta si colloca a cavallo tra un anno e l'altro (ad es., inizia a dicembre e finisce a gennaio); in quel caso, la query non mi restituisce il record.
    A questo - non ad altro - cerco soluzione. E non mi pare che sinora sia venuta, dal forum...
    metatad
    graphic & web design

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.