Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    335

    problema con between per limiti tra le date

    Ciao a tutti, ho un problema con l'estrazione di record tabella tra due limiti di data.
    l'istruzione sql iniziale e' mano mano cambiata, ma ogni volta mi capitano dei limiti nella richiesta che non fanno funzionare bene la selezione.
    Allora ho optato per la modifica con l'uso di between ma anche qui i problemi non mancano.
    Nel senso che non funziona nemmeno con questa soluzione!!
    Questo primo esempio, poi modificato funziona solo in alcuni casi.
    codice:
    $sql = $data-> query("SELECT * from noleggi_customer  WHERE matricola='$matr' and
                       (  '$data_start' >= nol_dal  and  '$data_fine' <= nol_al  ) order by nol_dal asc ") ;
    Nel senso che se un modello e' impegnato diciamo, dal 15/07/2015 al 21/07/2015 ed io eseguo una ricerca che parte dal 17 al 21 funziona ma se per ipotesi la richiesta fosse dal 14 al 22 non funge!!
    Allora ho provato con BETWEEN, modificando cosi',
    codice:
    $sql = $data-> query("SELECT * from noleggi_customer  WHERE matricola='$matr' and
                       (  '$data_start' BETWEEN nol_dal  AND  nol_al  ) order by nol_dal asc ") ;
    ma questa non funziona proprio, da manuale mi pare di capire che i valori limite debbano essere dei parametri fissi, mentre io li imposto da campi tabella, sara' questo il problema?
    Per questo mi sono rivolto a voi, qualcuno saprebbe dirmi se e come posso usare il BETWEEN impostando i valori da tabella?

    grazie per l'aiuto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    335
    In definitiva un'istruzione fruibile potrebbe essere questa ma comunque senza l'uso di BETWEEN che vorrei usare.
    codice:
    $sql = $data-> query("SELECT * from noleggi_customer  WHERE 
    				     (( '$data_start' >= nol_dal  AND '$data_start' <= nol_al ) OR
    					 ( '$data_start' <= nol_dal  AND '$data_start' <= nol_al ) )
    					    AND matricola='$matr'  order by nol_dal asc ") ;

  3. #3
    La tabella nel db è di tipo date? Se non è di tipo date non ti funziona between e dovresti usare prima una funzione che ti converte i dati estratti nel formato date

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    335
    Grazie Franci112, uso sempre i campi di tipo varchar, non uso mai altro formato,
    i valori in effetti non sono date, vengono memorizzati in AAAAMMGG in tutti i campi, quindi mi trovo a confrontare 20150702 BETWEEN 20150701 AND 20150720 .
    Quindi per usare between dovro' formattarli, ok grazie, preziosissimo consiglio, non ho trovato indicazioni valide nemmeno sul manuale php.
    Grazie ci provo!
    Ultima modifica di marcopa; 25-07-2015 a 18:22

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Quote Originariamente inviata da marcopa Visualizza il messaggio
    Grazie Franci112, uso sempre i campi di tipo varchar, non uso mai altro formato,
    i valori in effetti non sono date, vengono memorizzati in AAAAMMGG in tutti i campi, quindi mi trovo a confrontare 20150702 BETWEEN 20150701 AND 20150720 .
    Quindi per usare between dovro' formattarli, ok grazie, preziosissimo consiglio, non ho trovato indicazioni valide nemmeno sul manuale php.
    Grazie ci provo!
    Non ti serve convertire i dati. Dal momento in cui usi un formato SSAAMMGG puo sia confrontare o ordinare in maniera corretta.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Ho provato : SELECT * FROM `tutu` WHERE '20150713' between a and b

    a e b sono campi VARCHAR(8). La query fatta cosi funziona benissimo.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Non ci ho riflettuto più di tanto ma non dovresti scrivere ?
    codice:
    $sql = $data-> query("SELECT * from noleggi_customer  WHERE matricola='$matr' and
                      ( (  nol_dal BETWEEN '$data_start'  AND '$data_fine') or
                       (  nol_al BETWEEN '$data_start'  AND  '$data_fine'  ))
    order by nol_dal asc ") ;
    Ultima modifica di badaze; 25-07-2015 a 19:08
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Scritta così è una voragine per SQL injection

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Quote Originariamente inviata da MySQL Visualizza il messaggio
    Scritta così è una voragine per SQL injection
    ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    335
    Quote Originariamente inviata da MySQL Visualizza il messaggio
    Scritta così è una voragine per SQL injection
    Grazie a tutti sempre molto utili e risolutivi!
    Mysql cosa intendi per voragine? che la query potrebbe essere troppo aperta scritta in questo modo?

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.