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

Discussione: Query tra 2 date

  1. #1

    Query tra 2 date

    Sto facendo un motore di ricerca interno tipo orario dei voli e vorrei che l'utente riempiendo il campo $data_arrivo e $data_partenza, cliccando su invio abbia a video tutte le offerte relative a quel periodo di tempo

    Nel db quando metto le offerte ho un campo chiamato $valida_da e $valida_fino
    Come posso strutturare la query?

    Mettiamo caso che ho un'offerta nel db che vada dal 13 maggio 2009 al 30 maggio 2009 e nella ricerca inserisco che voglio fare dal 13 al 16 maggio 2009, il motore deve estrarmi fuori tutte le offerte o tutti i prezzi che stanno in quel lasso di tempo.
    Non credo che vada bene between ma non va bene nemmeno se faccio

    and a.valida_da >= '$data_arrivo' and a.valida_fino <= '$data_partenza'


    Come dovrei fare?
    Mai dire Mai

  2. #2
    codice:
    WHERE 
    '2009-05-13' BETWEEN valida_da AND valida_fino
    AND
    '2009-05-16' BETWEEN valida_da AND valida_fino

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

  3. #3
    ma non posso usare maggiore e minore di una determinata data? perche' usare between?
    Mai dire Mai

  4. #4
    non ti funziona col between?

    per confrontare le date si usa quell'operatore... solo se fossero dei timestamp funzionerebbe correttamente con < e >
    « Se nella prima mezz'ora non capisci chi è il pollo, allora il pollo sei tu. » [Thomas "Amarillo Slim" Preston, campione del mondo di poker]

  5. #5
    Originariamente inviato da trippacchiello
    ma non posso usare maggiore e minore di una determinata data? perche' usare between?
    perche' e' lo stesso e lo scrivi con meno caratteri.

    comunque le condizioni sono 4 e non 2 e sono in AND tra di loro.

    partenza >= data_da
    partenza <= data_a
    arrivo >= partenza
    arrivo <= data_a

    puoi scriverle come ti pare ma il succo e' quello.

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

  6. #6
    Originariamente inviato da king size slim
    non ti funziona col between?

    per confrontare le date si usa quell'operatore... solo se fossero dei timestamp funzionerebbe correttamente con < e >
    se confronti data con data va bene in entrambi i casi. L'importante e' che la data sia in formato ansi yyyy-mm-dd

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

  7. #7
    il problema e' che non mi va... nel senso che non capisco perche' dal 13 al 16 maggio non mi estrae le offerte quando ci sono...

    questa e' la query che sto provando ad usare:

    Codice PHP:
    $sql1=mysql_query("select a.id, a.albergo, a.titolo, DATE_FORMAT(a.valida_da, '%d/%m/%Y') AS valida_dal, valida_da, DATE_FORMAT(a.valida_fino, '%d/%m/%Y') AS valida_fino, a.prezzo, a.prezzo_come, a.scadenza, a.pacchetto, b.link, b.foto, b.comune, b.stelle from offerte a, albergo b where '$data_arrivo' BETWEEN a.valida_da AND a.valida_fino and '$data_partenza' BETWEEN a.valida_fino AND a.valida_fino and b.attivo = '1' and a.albergo = b.hotel"); 
    le date nel motore di ricerca le metto tipo gg-mm-aaaa mentre nel db le date delle offerte sono messe cosi: 2009-05-13

    Forse e' qui che sbaglio qualcosa?
    Mai dire Mai

  8. #8
    Originariamente inviato da piero.mac
    se confronti data con data va bene in entrambi i casi. L'importante e' che la data sia in formato ansi yyyy-mm-dd
    si era quello che intendevo con "timestamp" mi sono spiegato male


    @ trippacchiello

    forse il tuo problema è dato dal fatto che fai un DATE_FORMAT delle variabili e quindi nel where confronta le date formattate in formato dd/mm/yyyy
    « Se nella prima mezz'ora non capisci chi è il pollo, allora il pollo sei tu. » [Thomas "Amarillo Slim" Preston, campione del mondo di poker]

  9. #9
    Originariamente inviato da trippacchiello
    il problema e' che non mi va... nel senso che non capisco perche' dal 13 al 16 maggio non mi estrae le offerte quando ci sono...
    le date nel motore di ricerca le metto tipo gg-mm-aaaa mentre nel db le date delle offerte sono messe cosi: 2009-05-13

    Forse e' qui che sbaglio qualcosa?
    secondo te ha qualcosa a che vedere:

    13-05-2009
    con
    2009-05-13

    per precisare avverra' la seguente comparazione:

    2013-05-20
    con
    2009-05-13

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

  10. #10
    ma quindi anche nel modulo di ricerca dovro' mettere 2009-05-13 e 2009-05-16 no?
    Mai dire Mai

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.