Selezione sulla base di una data

renoir09

Utente Attivo
10 Ago 2009
72
0
0
Ciao a tutti
sono alle prime armi con php e mi scuso fin da ora se non ho trovato nelle discussioni precedenti la risposta al mio quesito per pura negligenza...
Vengo ora al mio problema:
ho creato un form con il quale inserisco dei dati in un database mysql ed ogni dato è associato ad una data di creazione (poichè ho creato un campo nella tabella con timestamp quindi la data di creazione si genera in automatico)
adesso vorrei creare una pagina web con la quale selezionare i dati sulla base di un determinato mese o anno indicati con un form e menu di selezione.
Spiego meglio: io seleziono da un menu il mese "giugno" e l'anno "2008" e vorrei che comparissero tutti i dati, la data dei quali (dd/mm/yyyy) sia ricompresa in quei parametri (giugno e 2008) inviati con il form.
C'è qualche esempio online? Esiste una funzione da richiamare?
Grazie in anticipo a chi mi darà una mano.
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
La seguente select dovrebbe risolvere il tuo problema:

Codice:
SELECT * FROM tabella WHERE YEAR(colonna_data) = 'anno' AND MONTH(colonna_data) = 'mese';

ovviamente devi sostituire nella select il nome della tabella, il nome della colonna contenente la data, l'anno che sarà quello proveniente dalla form di ricerca e mese (in cifre) sempre proveniente dalla form di ricerca.
 

renoir09

Utente Attivo
10 Ago 2009
72
0
0
grazie ma non funziona

grazie davvero per la risposta ma purtroppo non funziona:
avevo provato ad utilizzare questo codice :

<?php

if(isset($_POST["cmdOK"])){

echo "<tr class='t_r'>
<td class='t_c' colspan='5'>";

$sql = "SELECT * FROM tabella WHERE 1=1";

if($_POST["cboautomobili"] != ""){
$steuner = $_POST["cboautomobile"];
echo "Risultato per".getNomeAutomobile($automobile).".";
$sql = $sql." AND idautomobile = '$automobile'";
}
else{
echo "risultati per tutte le automobili.";

$dt = "SELECT * FROM tabella WHERE YEAR(data) = 'txtAnno' AND MONTH(data) = 'txtMese'";

if($_POST["txtMese"] != "" && $_POST["txtAnno"] != ""){
$dt = $_POST["txtAnno"]."-".$_POST["txtMese"];
$sql = $sql." AND data = '$dt'";

$sql = $sql.";";
$result = mysql_query($sql);

while($record = mysql_fetch_object($result)){
echo "<tr class='t_r'>";
echo "<td class='t_c'>".getNomeAutomobile($record->idautomobile)."</td>";
echo "<td class='t_c'>".$record->data."</td>";
?>


in realtà mancano alcune parti del codice perchè legati ad una funzione esterna (per la selezione delle automobili, il codice sarebbe lunghissimo) ma mi interessava sapere se qualcosa non andava bene nella sintassi della ricerca per data
thanks!
 

renoir09

Utente Attivo
10 Ago 2009
72
0
0
grazie ma non funziona

grazie davvero per la risposta ma purtroppo non funziona:
avevo provato ad utilizzare questo codice :

<?php

if(isset($_POST["cmdOK"])){

echo "<tr class='t_r'>
<td class='t_c' colspan='5'>";

$sql = "SELECT * FROM tabella WHERE 1=1";

if($_POST["cboautomobili"] != ""){
$steuner = $_POST["cboautomobile"];
echo "Risultato per".getNomeAutomobile($automobile).".";
$sql = $sql." AND idautomobile = '$automobile'";
}
else{
echo "risultati per tutte le automobili.";

$dt = "SELECT * FROM tabella WHERE YEAR(data) = 'txtAnno' AND MONTH(data) = 'txtMese'";

if($_POST["txtMese"] != "" && $_POST["txtAnno"] != ""){
$dt = $_POST["txtAnno"]."-".$_POST["txtMese"];
$sql = $sql." AND data = '$dt'";

$sql = $sql.";";
$result = mysql_query($sql);

while($record = mysql_fetch_object($result)){
echo "<tr class='t_r'>";
echo "<td class='t_c'>".getNomeAutomobile($record->idautomobile)."</td>";
echo "<td class='t_c'>".$record->data."</td>";
?>


in realtà mancano alcune parti del codice perchè legati ad una funzione esterna (per la selezione delle automobili, il codice sarebbe lunghissimo) ma mi interessava sapere se qualcosa non andava bene nella sintassi della ricerca per data
thanks!
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Innanzitutto dovresti dire cos'è che non funziona, ti da un errore la select non restituisce risultati?
Poi nel codice da te postato:

Codice:
$dt = "SELECT * FROM tabella WHERE YEAR(data) = 'txtAnno' AND MONTH(data) = 'txtMese'";

La tabella sulla quale effettui la select si chiama tabella?
Poi txtAnno e txtMese sono gli attributi che passi in POST? Se si dovresti scrivere:

Codice:
$dt = "SELECT * FROM tabella WHERE YEAR(data) = '".$_POST["txtAnno"]."' AND MONTH(data) = '".$_POST["txtMese"]."'";

Inoltre vedo ora che prima assegni un valore a $dt (la select) poi nell'IF fai:

Codice:
$dt = $_POST["txtAnno"]."-".$_POST["txtMese"];

e praticamente sovrascrivi il contenuto che avevi assegnato a $dt.
 
Ultima modifica:

renoir09

Utente Attivo
10 Ago 2009
72
0
0
Info supplementari

Scusa nella fretta non ho specificato:
in pratica quando clicco sul pulsante submit per effettuare la ricerca mi da come risultato tutte le automobili presenti nella tabella (la tabella con le automobili l'ho chiamato infatti per semplicita' "tabella" ed i txtAnno e txtMese sono appunto i nomi dei campi di testo del form), non effettuando quindi una selezione sulla base di mese e anno.
Esempio: io ho 20 auto nella tabella, quasi tutte inserite in un periodo diverso, ma se seleziono ad esempio "08" e "2008", invece di darmene 2 (due auto infatti sono state inserite nella tabella con una data 2008/08/08) me le da tutte e 20.
Ho effettuato i cambiamenti da te suggeriti ma non hanno sortito effetto.
Essendo alle prime armi uso parti di codice già esistenti che provo ad integrare con codice nuovo, questo puo' generare confusione.
Mi rendo conto che è complesso e disagevole fornire delle risposte con informazioni frammentarie quindi accetto anche dei semplici link con alcuni esempi da testare.
Grazie ancora per la pazienza e la celerità delle risposte
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Nella parte relativa all'else del codice da te postato:

PHP:
...
else {
    echo "risultati per tutte le automobili.";

    if ($_POST["txtMese"] != "" && $_POST["txtAnno"] != "") {
        $sql = $sql." AND YEAR(data) = '".$_POST["txtAnno"]."' AND MONTH(data) = '".$_POST["txtMese"]."'";
    }
}

$result = mysql_query($sql);
...
 

renoir09

Utente Attivo
10 Ago 2009
72
0
0
nulla

Purtroppo non va...non cambia nulla
mi seleziona sempre tutte le auto
non importa...grazie non voglio approfittare...
andro' a tentativi...se proprio non trovo la soluzione provero' a postare più in là l'intero codice (ma è molto lungo)...
thanks!!!
 

renoir09

Utente Attivo
10 Ago 2009
72
0
0
Risolto ma ora...

Ho risolto!!! Era solo il fatto che richiamavo una funzione non corretta in archivio.
Ma adesso ho un altro problema in un'altra pagina, teorico prima ancora che pratico visto che il codice è in divenire.
Mettiamo che io voglia fare una selezione immettendo non tutta la data ma solo una parte della data. Diciamo che voglio fare una selezione solo per l'anno 2007. Tutto bene se uso:

$sql = "SELECT * FROM tblAuto WHERE 1=1";

$d = $_POST["txtAnno"]."".$_POST["txtMese"]."".$_POST["txtGiorno"];
$sql = $sql." AND data LIKE '%$d%'";

immettendo in uno dei tre campi del form (quello dell'anno precisamente "txtAnno") il valore "2007".
Ma il problema sorge naturalmente se io ad esempio nel campo del mese inserisco "07" ricercando una selezione solo sulla base del mese di luglio, poichè con quella sintassi mi da non solo le automobili del mese di luglio ma anche dell'anno 2007.
Qualche suggerimento (anche un semplice esempio o un link va bene) per poter effettuare una selezione diversificata sulla base di giorno-mese-anno oppure mese-anno oppure mese oppure anno oppure giorno (insomma un casino:), lo so, ma se qualcuno ha voglia di perder tempo con me non staro' a dissuaderlo)...
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
La soluzione è nei post precedenti. Una generica select sulla data o parti di essa può essere eseguita in questo modo:

Codice:
SELECT * FROM tabella WHERE YEAR(colonna_data) = 'anno' AND MONTH(colonna_data) = 'mese' AND DAYOFMONTH(colonna_data) = 'giorno';

Nel tuo caso puoi fare una cosa del genere:

PHP:
$sql = "SELECT * FROM tblAuto WHERE 1=1";

$anno = $_POST["txtAnno"];
$mese = $_POST["txtMese"];
$giorno = $_POST["txtGiorno"];

if ($anno != "") {
    $sql = $sql." AND YEAR(data) = '$anno'";
} 
if ($mese != "") {
    $sql = $sql." AND MONTH(data) = '$mese'";
} 
if ($giorno != "") {
    $sql = $sql." AND DAYOFMONTH(data) = '$giorno'";
}
 

renoir09

Utente Attivo
10 Ago 2009
72
0
0
Siiiiiiiiiiiiiiiiiii!!!!

Funziona perfettamente:)!!! Grazie infinite per l'indicazione ed il codice...Ne faro' buon uso anche in altre pagine.:byebye:
 

Bizio2009

Utente Attivo
12 Giu 2009
310
0
0
Ciao! Mi scuso, posso riprendere l'argomento perchè non ne esco fuori e il php piano piano lo stò studiando....difficilino mannaggia...

Io vorrei che mi desse i dati secondo data (mese e anno) e non tutti...

PHP:
$query="INSERT INTO diagnosi_data (mese, anno, diagnosi_ingresso) VALUES ('$mese', '$anno', '$diagnosi_ingresso')";   
   
$insert=mysql_query($query) or die(mysql_error()); 

$diagnosi_ingresso=$_POST['diagnosi_ingresso']; 
$mese=$_POST['mese']; 
$anno=$_POST['anno']; 

$query=mysql_query("SELECT * FROM inserimento_dati WHERE YEAR(diagnosi_data) = 'anno' AND MONTH(diagnosi_data) = 'mese' ORDER BY diagnosi_data DESC") or die(mysql_error());  




while($inserimento_dati=mysql_fetch_array($query)){


$diagnosi_ingresso=$inserimento_dati['diagnosi_ingresso'];

echo" <tr><td>$diagnosi_ingresso</td></tr>";

}
  
?>

Mi dà variabili non definite "mese", "anno", "diagnosi_ingresso".
Ho fatto varie modifiche ma magari mi stampa i dati ma tutti i dati e non secondo il mese selezionato.

Grazie molte e perdonate la mia ignoranza.
 

Bizio2009

Utente Attivo
12 Giu 2009
310
0
0
Ho modificato così, ma ora non mi stampa nulla...:hammer:

PHP:
$mese=$_POST['mese']; 
$anno=$_POST['anno']; 


$query=mysql_query("SELECT * FROM inserimento_dati WHERE YEAR(diagnosi_data) = '$anno' AND MONTH(diagnosi_data) = '$mese' ORDER BY diagnosi_data DESC") or die(mysql_error());  




while($inserimento_dati=mysql_fetch_array($query)){

$diagnosi_ingresso=$inserimento_dati['diagnosi_ingresso'];

echo" <tr><td>$diagnosi_ingresso</td></tr>";

}
 

renoir09

Utente Attivo
10 Ago 2009
72
0
0
Complicare il tutto

Credo che nei post precedenti dovrebbere esserci un esempio postato da Satifal...
comunque, scusa se sgomito, vorrei avere lumi su una variante della selezione per data...
Mettiamo che abbia un elenco di persone che versano delle donazioni ad una associazione di volontari. Se ognuna di queste persone versa oltre 50 euro per anno, l'associazione deve inviare una ricevuta fiscale al donatore. Puo' benissimo essere che una persona abbia inviato 100 euro ma nell'arco di 3 anni (ogni anno 33 euro circa), quindi in questo caso niente ricevuta. Quindi vorrei capire come selezionare i donatori che in un solo anno (va bene conteggiare gli anni 2007,2008,2009 abbiano inviato oltre 50 euro.
Accetto suggerimenti, esempi quando possibile.
 

renoir09

Utente Attivo
10 Ago 2009
72
0
0
tabella

Pensavo di basarmi su 2 tabelle:
la prima che ho chiamato "tbldonazioni", quella con le somme inviate dovrebbe essere cosi'

iddonazione
numeropagamento
data(AAAA/MM/GG)
ammontare(euro)
nomedonatore
iddonatore
ricevuto(si/no)

la seconda "tbldonatori" cosi':

id
numerodonatore
nomedonatore

anche se poi aggiungerei altri campi come indirizzo, telefono ecc.
ma per ora userei questi...
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Dalla tabella tbldonazioni potresti anche aliminare la colonna nomedonatore in quanto già presente nella tabella tbldonatori. Comunque ho abozzato una query che non è proprio ciò che richiedi, ma ci si potrebbe lavorare un po' su per modificarla.

Codice:
SELECT tbldonatori.id, tbldonazioni.iddonatore, SUM(tbldonazioni.ammontare) AS totale 
FROM tbldonatori 
LEFT JOIN tbldonazioni 
ON tbldonatori.id = tbldonazioni.iddonatore 
WHERE tbldonatori.id = $iddonatore 
AND YEAR(data) = '$anno'
GROUP BY tbldonatori.id
ORDER BY totale DESC

In questo modo dovresti essere in grado di recuperare la somma delle donazioni per un particolare donatore ($iddonatore) in un dato anno ($anno). Resterebbe da modificare la query facendo in modo che essa restituisca risultato solo se la somma così trovata è superiore a 50 euro.
 

renoir09

Utente Attivo
10 Ago 2009
72
0
0
Proviamo...

Interessante...mi metto subito a provare la tua soluzione
Ancora e sempre grazie per i consigli...
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Ho effettuato una modifica alla query:

Codice:
SELECT 
tot.nome, tot.totale
FROM
(
SELECT tbldonatori.nomedonatore AS nome, tbldonatori.id, tbldonazioni.iddonatore, SUM(tbldonazioni.ammontare) AS totale 
FROM tbldonatori 
LEFT JOIN tbldonazioni 
ON tbldonatori.id = tbldonazioni.iddonatore 
WHERE 
YEAR(data) = '$anno'
GROUP BY tbldonatori.id
) AS tot
WHERE
tot.totale > 50

Questa restituisce tutti i donatori, per un dato anno ($anno) che hanno versato un importo maggiore o uguale a 50 euro.
 
Discussioni simili
Autore Titolo Forum Risposte Data
blips Update basato sulla selezione dell'utente PHP 0
A Errore visualizzazione selezione testo Photoshop 0
R Filtro multiplo di selezione Sql PHP 2
maxnegri [Javascript] TinyDatePicker data format e selezione progressiva. Javascript 0
M [PHP] Selezione da menu a discesa con 2 variabili PHP 0
V access 2007, maschera con caselle di selezione Programmazione 4
M [PHP] Selezione record da elenco PHP 24
Tommy03 [PHP] Errore query selezione avg PHP 0
G [ASP] Incrementare un valore on the fly su selezione select Classic ASP 3
W [PHP] Come far funzionare un form di selezione PHP 12
U [PHP] Selezione con menu a tendina e recupero selezione PHP 5
S [WordPress] [HTML] Bordo di selezione area - Link di ancoraggio WordPress 3
A [Javascript] Selezione dinamica video Javascript 0
A [Javascript] Selezione dinamica Javascript 27
F Alert selezione checkbox jQuery 6
gandalf1959 mysql, selezione dati ricorrenti più volte PHP 8
E [PHP] selezione automatica lingua PHP 14
S [PHP] Selezione dati con riferimento ad altra colonna tabella PHP 22
F Mantenere selezione immagine Javascript 1
N selezione elementi Javascript 0
asevenx Cerco plugin per gestire appuntamenti con agenda e campi di selezione WordPress 4
M Visualizzare tabella in base a selezione PHP 1
G L'interno della selezione non cambia Photoshop 1
M Cambiare valore ad un campo in base alla selezione fatta nel menu a tendina PHP 16
Marco_88 Verificare la selezione degli elementi dom jQuery 2
L Selezione dinamica da form. PHP 0
M selezione da più tabelle PHP 1
F Problema selezione dinamica select/jsp/mysql Javascript 0
L elenco file immagini con checkbox di selezione PHP 1
K errore durante la selezione del Database PHP 2
D Selezione di dati da più tabelle in Mysql PHP 3
L Selezione elementi nel menù in base ad una select jQuery 1
M [risolto] Passaggio valore tramite link per selezione dati su database. PHP 3
A Visualizzare albero DOM completo oppure Visualizzare Nodi che fanno parte di una Selezione Javascript 6
C Sviluppo chat con particolari criteri di selezione per web-app su mobile Offerte e Richieste di Lavoro e/o Collaborazione 1
I Submit in base alla selezione PHP 1
P come gestire la selezione data PHP 40
S selezione di una foto di una photogallery PHP 4
F Problema con selezione di un file nel database PHP 5
U Estrazione dati da un db con un menu selezione in cascata PHP 6
I come posso creare una pagina di inserimento con selezione di mensilità? PHP 1
L Selezione da database con DropDown Menu e visualizzazione PHP 10
G selezione progressiva delle righe di una tabella Javascript 11
F Inserire voci di selezione PHP 3
valient13 option che si elimina alla selezione dell'altro PHP 6
D modifica query selezione PHP 38
coccobil SQL query con selezione multipla di LIKE PHP 6
P Come memorizzare le immaggino con selezione multipla PHP 2
S selezione regione provincia comune PHP 2
Monital Selezione nomi PHP 1

Discussioni simili