Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: ricerca per mese

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    ricerca per mese

    Devo fare una query che estragga dal db una serie di dati, quando si verifica almeno una delle condizioni poste.
    La condizione è che, posta una variabile $mesecorrente, in formato date (0000-00-00), la query estragga i dati laddove il MESE della data indicata dalla variabile, sia compreso tra il MESE di un campo ed il MESE di un'altro campo (entrambe di tipo date).
    La query la faccio così:
    Codice PHP:
    $result mysql_query("SELECT * FROM `offerte` WHERE ('$mesecorrente' BETWEEN MONTH(`data_in`) AND MONTH(`data_out`)) OR ('$mesecorrente' BETWEEN MONTH(`data_in2`) AND MONTH(`data_out2`)) OR ('$mesecorrente' BETWEEN MONTH(`data_in3`) AND MONTH(`data_out3`)) OR ('$mesecorrente' BETWEEN MONTH(`data_in4`) AND MONTH(`data_out4`)) OR ('$mesecorrente' BETWEEN MONTH(`data_in5`) AND MONTH(`data_out5`)) OR ('$mesecorrente' BETWEEN MONTH(`data_in6`) AND MONTH(`data_out6`)) GROUP BY `id_hotel` ORDER BY `hotel_pos`,`inter_pos`,`data_in`,`data_in2`,`data_in3`,`data_in4`,`data_in5`,`data_in6` ASC"); 
    e la variabile $mesecorrente mostra correttamente una data nel formato esatto (faccio un echo prima della query). Però, nonostante nel db ci siano con certezza dei dati corrispondenti a questa condizione, il risultato restituito dalla query è nulla. Nessun dato.
    Com'è possibile? Dove sto sbagliando?
    metatad
    graphic & web design

  2. #2
    come puoi confrontare una data anno-mese-giorno '0000-00-00' con un valore mese '00' ????

    confronta anno-mese con anno-mese

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Ooops!...
    metatad
    graphic & web design

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Ok, faccio questa query:
    Codice PHP:
    $result3 mysql_query("SELECT * FROM `offerte` WHERE `id` = '$idh' AND (('$currentmonth' <= MONTH(`data_out`) AND '$currentyear' <= YEAR(`data_out`)) OR ('$currentmonth' <= MONTH(`data_out2`) AND '$currentyear' <= YEAR(`data_out2`)) OR ('$currentmonth' <= MONTH(`data_out3`) AND '$currentyear' <= YEAR(`data_out3`)) OR ('$currentmonth' <= MONTH(`data_out4`) AND '$currentyear' <= YEAR(`data_out4`)) OR ('$currentmonth' <= MONTH(`data_out5`) AND '$currentyear' <= YEAR(`data_out5`)) OR ('$currentmonth' <= MONTH(`data_out6`) AND '$currentyear' <= YEAR(`data_out6`))) ORDER BY `pos`,`inter_pos`,`data_in`,`data_in2`,`data_in3`,`data_in4`,`data_in5`,`data_in6` ASC"); 
    laddove le variabili $currentmonth e $currentyear sono definite preventivamente, e correttamente (un echo, mi conferma che $currentyear è 2010.
    Eppure, la query continua a restituirmi anche un record relativo al 2009!
    Perchè?
    metatad
    graphic & web design

  5. #5
    Boh! ... una tabella di quel genere con tutte quelle date mi suona gia' male come struttura.

    Ad ogni buon modo presumo tu sappia quel che stai facendo e il solo consiglio che posso darti e' di togliere man mano ogni gruppo di OR per vedere da dove ti arriva quel record con anno 2009

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    La tabella contiene fino a 6 diversi periodi, ciascuno con una data d'inzio ed una di fine (da qui, tutta la serie di date).
    Da dove venga la data con anno 2009, lo so già, appartiene al primo periodo (tra data_in e data_out). Ma saperlo non è che mi porti a capire/risolvere il problema...
    Se la query è corretta (lo è?), perchè mi restituisce quel dato? E comunque, c'è eventualmente un'altro modo per fare una query che abbia questo scopo?
    metatad
    graphic & web design

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    up?
    metatad
    graphic & web design

  8. #8
    Originariamente inviato da metatad
    Se la query è corretta (lo è?), perchè mi restituisce quel dato? E comunque, c'è eventualmente un'altro modo per fare una query che abbia questo scopo?
    siccome hai tutto in OR e' sufficiente che in un campo ci sia un valore ammesso perche' ti venga restituita tutta la tupla che potrebbe anche contenere altre date che tu non vorresti vedere.

    Se verifichi la tupla che ritieni anomala vedrai che in una o piu' date ci sara' un valore ammesso. Quindi la query con lo stesso valore in OR su tutti i campi non e' attendibile.

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

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    E quindi, come posso risolvere?
    metatad
    graphic & web design

  10. #10
    Originariamente inviato da metatad
    E quindi, come posso risolvere?
    dovrei conoscere il progetto per rispondere in modo appropriato.

    Dovresti puntare ad una data specifica che condizioni le rimanenti altre. Chiariamo:

    Se usi OR significa che ti serve la tupla dove una delle condizioni della data sia TRUE a prescindere da tutte le altre. E quindi provvedi a filtrare in altro modo date non desiderate.

    Se ti serve uno specifico gruppo di date allora devi puntare solo su quel gruppo ed eventualmente mettere in OR solo le altre chiamiamole alternative.

    Ma mi suona malissimo la struttura della tabella. In pratica da quel che si puo' capire dalla query la data inizio e' sempre la stessa.

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

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 © 2026 vBulletin Solutions, Inc. All rights reserved.