Query in base alla data

max_400

Utente Attivo
23 Gen 2009
770
0
16
caltanissetta
max400.forumfree.it
Ciao a tutti...

Devo fare un database con un campo di ricerca
in modo che un impiegato scriva la data in un intervallo
dal 01-08-11 a 08-08-11.

Quindi un semplice form dove si inserisce la data
e una semlice query che estragga i dati.

Cortesemente se potete darmi uno script semplice
e già testato perchè per ora sto lavorando e non ho tempo
di sperimentare.

Grazie.
by max_400
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
lavorare con le date è quasi sempre un casino, soprattutto se l'inserimento è libero.
secondo me ti conviene cercarti prima un data picker in modo che la data sia inserita sempre in un unico modo.
o fare delle select con scelta obbligata
es. se l'inserimento è libero uno può inserire
8 agosto 2011
8-8-11
08/08/2011
ecc..
se non addirittura
31 febbraio 2011
poi quando devi registrarla e poi soprattutto cercarla entri nelle pegole
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao
io uso questa soluzione
PHP:
<?php
        if (isset($_POST['cerca']) && $_POST['cerca'] == 'Cerca') {
            $d_day = $_POST['d_day'];
            $d_month = $_POST['d_month'];
            $d_year = $_POST['d_year'];
            $a_day = $_POST['a_day'];
            $a_month = $_POST['a_month'];
            $a_year = $_POST['a_year'];
            if (checkdate($d_month, $d_day, $d_year)) {
                $dal = "$d_year-$d_month-$d_day";
                if (checkdate($a_month, $a_day, $a_year)) {
                    $al = "$a_year-$a_month-$a_day";
                    $query = "SELECT * FROM tabella 
                                   WHERE Data BETWEEN '$dal' AND DATE_ADD('$al',INTERVAL 1 DAY)";
                    //qui la query andrà eseguita
                    echo $query;
                } else {
                    echo "<script type='text/javascript'>
                            alert('La seconda data non è valida');
                          </script>";
                }
            } else {
                echo "<script type='text/javascript'>
                         alert('La prima data non è valida');
                      </script>";
            }
        } else {
            $d_day = '01';
            $d_month = date('m');
            $d_year = date('Y');
            $a_day = date('d');
            $a_month = date('m');
            $a_year = date('Y');
        }

        $mesi = array(1, 'Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio',
            'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre');

        echo "<form action='test.php' method='post'>";
        echo "<div class='mioForm'>";
        echo "Dal&nbsp;&nbsp;&nbsp;<select name='d_day'>";
        for ($i = 1; $i < 32; $i++) {
            $i = str_pad($i, 2, '0', STR_PAD_LEFT);
            echo "<option value='$i'";
            if ($d_day == $i)
                echo " selected='selected'";
            echo ">$i</option>\n";
        }
        echo "</select>&nbsp;&nbsp;&nbsp;";

        echo " <select name='d_month'>";
        for ($x = 1; $x < 13; $x++) {
            $xx = str_pad($x, 2, '0', STR_PAD_LEFT);
            echo "<option value='$xx'";
            if ($d_month == $xx) {
                echo " selected='selected'";
            }
            echo ">$mesi[$x]</option>\n";
        }
        echo "</select>&nbsp;&nbsp;&nbsp;";

        echo "<select name='d_year'>";
        for ($y = 2000; $y <= date('Y'); $y++) {
            echo "<option value='$y'";
            if ($d_year == $y)
                echo " selected='selected'";
            echo ">$y</option>\n";
        }
        echo "</select>&nbsp;&nbsp;&nbsp;";



        echo "Al&nbsp;&nbsp;&nbsp;<select name='a_day'>";
        for ($i = 1; $i < 32; $i++) {
            $i = str_pad($i, 2, '0', STR_PAD_LEFT);
            echo "<option value='$i'";
            if ($a_day == $i)
                echo " selected='selected'";
            echo ">$i</option>\n";
        }
        echo "</select>&nbsp;&nbsp;&nbsp;";

        echo " <select name='a_month'>";
        for ($x = 1; $x < 13; $x++) {
            $xx = str_pad($x, 2, '0', STR_PAD_LEFT);
            echo "<option value='$xx'";
            if ($a_month == $xx) {
                echo " selected='selected'";
            }
            echo ">$mesi[$x]</option>\n";
        }
        echo "</select>&nbsp;&nbsp;&nbsp;";

        echo "<select name='a_year'>";
        for ($y = 2000; $y <= date('Y'); $y++) {
            echo "<option value='$y'";
            if ($a_year == $y)
                echo " selected='selected'";
            echo ">$y</option>\n";
        }
        echo "</select>&nbsp;&nbsp;&nbsp;";
        echo "<input type='submit' value='Cerca' name='cerca'/>";

        echo "</div>";
        echo "</form>";

        // se la query viene eseguita mostro i risultati
        if ($query) {
            echo "Risultati della query";
        }
        ?>
Non controllo se la seconda data sia maggiore della prima perchè in caso contrario mysql dovrebbe semplicemente restituire un insieme vuoto.
Comunque si può sempre aggiungere.
Non sarà il massimo considerando che non uso javascript, ma il suo lavoro lo fa!
 

max_400

Utente Attivo
23 Gen 2009
770
0
16
caltanissetta
max400.forumfree.it
Quanti scarabocchi....

....ho trovato un sistema più semplice.

Basta modificare il campo data in semplice testo "VARCHAR"
ed applicare il BETWEEN

scad-intervallo.jpg

ecco qui il link esempio
basta mettere dal 01-08-11 al 05-08-11

PHP:
$dal=htmlspecialchars($_POST['dal']);
$al=htmlspecialchars($_POST['al']);

include("dati-per-la-connessione-al-database.php");

$query = "SELECT `data_inizio`,`quantita`,`tipo`,`descrizione`,`scadenza`,`pagam`,`altro` FROM `nome_tabella` WHERE scadenza BETWEEN '$dal' AND '$al' ORDER BY scadenza";
 

minatore

Utente Attivo
25 Set 2007
410
0
0
....ho trovato un sistema più semplice.

Basta modificare il campo data in semplice testo "VARCHAR"
ed applicare il BETWEEN

scad-intervallo.jpg

ecco qui il link esempio
basta mettere dal 01-08-11 al 05-08-11

PHP:
$dal=htmlspecialchars($_POST['dal']);
$al=htmlspecialchars($_POST['al']);

include("dati-per-la-connessione-al-database.php");

$query = "SELECT `data_inizio`,`quantita`,`tipo`,`descrizione`,`scadenza`,`pagam`,`altro` FROM `nome_tabella` WHERE scadenza BETWEEN '$dal' AND '$al' ORDER BY scadenza";

Ciao ho provato a testare il tuo script, ma non da grandi risultati, forse potrebbe essere migliorato
01-07-11 al 25-07-11 non da i risultati sperati, poi quel (11) che sarebbe l'anno lo modificherei in 2011.
Forse è meglio inserire un calendario js e far scegliere la data
Ciao buon lavoro
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
anche considerando che le date vengano inserite sempre nel modo corretto,

usando varchar per definire il campo data, una ricerca di questo tipo (dal 25-07-11 al 02-08-11) non funzionerà

perchè per mysql 25-07-11 sarà maggiore di 02-08-11

Non ho provato ma in teoria è così.

Considera piuttosto di memorizzare nel db le date nel formato unix,
dovrai poi trasformare le date recuperate dal form in secondi,
cosi l'esempio di prima dovrebbe funzionare, sempre che la data venga inserita nel formato che ti aspetti.
 

max_400

Utente Attivo
23 Gen 2009
770
0
16
caltanissetta
max400.forumfree.it
eh si... effettivamente...

avevo fatto solo 2 prove
dall' 01-08-11 al 05-08-11 e dall' 01-08-11 al 13-08-11
e mi dava i risultati giusti. Quindi avevo chiuso l'argomento
ma alì mortè dall'1 -8 al 31 mi da anche quelli di luglio mortacci sua
mi serviva qualkosa di semplice e veloce da realizzare...

Ma forse mi è venuta un'idea... cioè eliminare i manifesti di luglio e creare un'altra tabella a parte
mò provo...

au revoir
 

max_400

Utente Attivo
23 Gen 2009
770
0
16
caltanissetta
max400.forumfree.it
Fatto!!

sembra funzionare.... ho duplicato la tabella ed ho eliminato quelli di luglio

between3-agosto.php

e questi sono tutti
select-tutti-agosto.php

ovviamente se faccio una tabella per ogni mese mi sembra superfluo mettere 08-11 oppure 08-2011
per velocizzare le operazioni di ricerca basta semplicemente mettere il giorno di inizio e quello di fine

Naturalmente in seguito per altre applicazioni sarò costretto ad utilizzare il sistema del dottor criric
se trovate delle scorciatoie più brevi non esitate a rispondere

Grazie per l'attenzione... onorevoli!
by max_400
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
usa il timestamp tipo unix è quello che poi da meno problemi, sia per gli ordinamenti che gli intervalli e relativi calcoli (es tra tre mesi = timestamp + 60*60*60*24*30), poi quando la devi visualizzare la trasformo in data tipo umano con
echo date("d m Y";$formato_timestamp);
nel db la data int(15)
 

max_400

Utente Attivo
23 Gen 2009
770
0
16
caltanissetta
max400.forumfree.it
il gattoooooooooo.... è tornato il gatto!!!

Signor gattino... ormai ho creato 3 tabelle in quel modo:
luglio - agosto - e oggi ho fatto settembre.
Ma il mio lavoro è ormai finito a Settembre sono fuori
ed il database sarà abbandonato.

Però dal punto di vista della curiosità io farei:
Dividere giorno e mese (2 elementi) e cosi non ci dovrebbero essere problemi
utilizzando gli operatori And e Where quindi 2 campi o sarebbe meglio 3 (per l'anno)
ho trovato questo esempio nei miei appunti:

PHP:
Adesso vogliamo selezionare solo le persone con il nome uguale a “Andrea” e il cognome uguale a “Rossi”:
Usiamo la seguente istruzione SELECT:

SELECT * FROM Persone
WHERE Nome='Andrea'
AND Cognome='Rossi'

dove il campo nome lo possiamo modificare in giorno
ed il campo cognome in mese
e cosi non ho bisogno di fare 3 tabelle.

E poi bisogna vedere come inserire il between...
Tutto ipoteticamente... Che ne dici? :book:

(il gatto dà credenza... quello che fa pensa!)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
credo che sia un metodo perfetto per complicarsi la vita.
sarò noioso, ma l'uso del timestamp per me è il migliore per risolvere tutti (o quasi) i problemi.
 
Discussioni simili
Autore Titolo Forum Risposte Data
MarcoGrazia [mysql][mariadb]Raggruppare query in base alla data MySQL 2
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
M Query Data Base Access MS Access 2
A Ordinare query sql in base ai risultati di ricerca PHP 1
N query personalizzata in base al nome utente Classic ASP 1
max75 query su due tabelle e dati doppioni MS Access 2
E Aiuto per query PHP 8
E Query differenza tra tabelle MySQL 5
E Query Alias PHP 4
T Query con date MS Access 1
K Inserimento query Errore 1366 PHP 4
L Query e selezione DB con $_POST PHP 2
M query update e delete PHP 0
A media degli elementi estratti da una query MySQL 0
S Passare query o utm alla pagina successiva Domini 1
O problema con query PHP 4
M Query PHP 8
R query DELETE non cancella i record PHP 1
G Query con i giorni della settimana MySQL 10
E Query annidate o cicli MySQL 1
C bottone query MySQL 0
T Query su due tabelle con totali Database 4
G AVVISO QUERY IN ESECUZIONE PHP 1
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
S Selezionare ultimo record di una sotto query MySQL 27
G Menù a tendina di ricerca con query PHP 1
V Query per una somma PHP 2
F stampare a video i risultati della query PHP 1
L problema con query select PHP 2
D Query sum Database 1
M Visualizzazione a video risultati query php PHP 0
A form PHP prenotazione tramite query PHP 2
R Problema query con ricerca id numerico PHP 2
G Casella combinata in una query MS Access 4
R Aiuto con le query MS Access 2
Y query di DELETE PHP 4
V Query Oracle Oracle 0
L query somma PHP 8
W Query SQL Classic ASP 2
M Problemi con query a più tabelle PHP 3
Alex_70 Conteggio nella query PHP 0
A nome file che contiene punto passato come parametro a query PHP 31
F query e form con select multipla PHP 17
M Problema su query JOIN in tre tabelle PHP 0
M Ordinare una query join PHP 2
Alex_70 Query ORDER BY PHP 18
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
Alex_70 foreach explode query PHP 3

Discussioni simili