Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [MySql]Problema con BETWEEN...

    Ciao a tutti,
    ho un problema con un campo di tipo DATA su cui vado a fare una query con BETWEEN, vi spiego il problema:
    ad esempio ho una serie di record di questo tipo:

    data:
    2006-02-03
    2006-02-04
    2006-02-05
    2006-02-06
    2006-02-07
    2006-02-08
    2006-02-09

    se faccio una query del genere:

    SELECT ........ data BETWEEN 2006-02-02 AND 2006-02-10
    la query mi restituisce 7 risultati, ovviamente, perchè la data è compresa in quell'intervallo indicato.
    Invece a me interessa che la query mi restituisca 0, perchè le date indicate non sono presenti nel range dei miei record!chiaro??

    grazie mille a tutti!

  2. #2
    Domanda ermetica la tua.

    Between e' tra valore iniziale AND valore finale... mi pare che sia cosi'....

    che vorresti dire con restituisca 0?

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

  3. #3
    Originariamente inviato da piero.mac
    Domanda ermetica la tua.

    Between e' tra valore iniziale AND valore finale... mi pare che sia cosi'....

    che vorresti dire con restituisca 0?

    ciao piero.mac,
    volevo dire che probabilmente BETWEEN non va bene per la query che mi serve...mi deve restituire 0 perchè io vorrei un confronto "stretto", a parole vorrei una cosa del tipo: nell'intervallo 2006-02-02 e 2006-02-10 ci sono tutte le date compresi gli estremi?, che ovviamente between non fa... un pò più chiaro?

    scusa, ma sono un po rinco a spiegare le cose...

    ti ringrazio!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Devi calcolare quanti giorni effettivi ci sono nell'intervallo e poi fare un select count(*) BETWEEN
    There are 10 types of people in the world - those who understand binary and those who don't.

  5. #5
    Forse non si riesce a farlo con solo mysql, o quanto meno non in forma cosi' diretta. Si potrebbero contare i giorni tra i due intervalli e confrontare il numero dei risultati ... se sono date univoche. Oppure estrarre con between e controllare in php....

    un esempio:
    codice:
    SELECT to_days('2006-02-10') - to_days('2006-02-02') AS tot1,
    COUNT(*) as tot2
    from tabella
    where data between '2006-02-02' AND '2006-02-10'
    
    ....
    
    poi confronti...
    
    if($row['tot1'] - $row['tot2'] == 0 ) ci son tutte le date.
    else .... ecc

    ovviamente saprai solo se ci sono tutti oppure no.

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

  6. #6
    Originariamente inviato da frinkia
    Devi calcolare quanti giorni effettivi ci sono nell'intervallo e poi fare un select count(*) BETWEEN
    ciao,
    scusa...quindi se io so che ci sono ad esempio 5 giorni tra dataINIZIO e dataFINE, come dovrei fare?

    grazie!

  7. #7
    Originariamente inviato da piero.mac
    Forse non si riesce a farlo con solo mysql, o quanto meno non in forma cosi' diretta. Si potrebbero contare i giorni tra i due intervalli e confrontare il numero dei risultati ... se sono date univoche. Oppure estrarre con between e controllare in php....

    un esempio:
    codice:
    SELECT to_days('2006-02-10') - to_days('2006-02-02') AS tot1,
    COUNT(*) as tot2
    from tabella
    where data between '2006-02-02' AND '2006-02-10'
    
    ....
    
    poi confronti...
    
    if($row['tot1'] - $row['tot2'] == 0 ) ci son tutte le date.
    else .... ecc

    ovviamente saprai solo se ci sono tutti oppure no.

    grazie mille piero, gentilissimo!
    questa sera quando rientro provo.


    ciao buon lavoro!

  8. #8
    ciao piero...
    purtroppo non funziona, sinceramente non ho capio bene il calcolo che fai con quella query, in TOT1 c'è la differenza delle date e in TOT2?...


    grazie mille!

  9. #9
    Originariamente inviato da dinucciarturo
    purtroppo non funziona, sinceramente non ho capio bene il calcolo che fai con quella query, in TOT1 c'è la differenza delle date e in TOT2?...
    in tot2 trovi il numero delle righe che rispondono alla condizione where. ovviamente si presume che il dato "data" sia univoco. se non lo fosse bisogna fare un raggruppamento utilizzando GROUP BY.

    Se vengono postati dati in modo generico le risposte saranno generiche, o quanto meno per quel che si riesce a capire. Oltre al SELECT * e poche altre, quasi tutte le queries devono essere definite in modo preciso in base ai dati esistenti ed ai risultati che si vogliono ottenere.

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

  10. #10
    Originariamente inviato da piero.mac
    in tot2 trovi il numero delle righe che rispondono alla condizione where. ovviamente si presume che il dato "data" sia univoco. se non lo fosse bisogna fare un raggruppamento utilizzando GROUP BY.
    Per contare le date diverse si può usare:
    SELECT COUNT(DISTINCT data)

    la query diventa:
    codice:
    SELECT to_days('2006-02-10') - to_days('2006-02-02')  AS tot1,
    COUNT(DISTINCT data) as tot2
    from tabella
    where data between '2006-02-02' AND '2006-02-10'
    in tot2 avrai le date diverse contenute nel file, nel periodo richiesto.

    Spero che ti sia ancora utile
    Riccardo Cattania
    http://www.riccardocattania.net/

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