Visualizzazione risultati 1 fino 9 di 9

Discussione: ricerca per mese/anno

  1. #1
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito ricerca per mese/anno

    Buongiorno a tutti,
    come da oggetto nella query che sto cercando di fare vorrei riepilogare i dati mensili dal db.
    Quello che avevo pensato di fare è:
    Codice PHP:
    100- $sql="SELECT * FROM ospix, residenti, salastudio WHERE residente=cod_res and ospite=id_SalaStudio and data LIKE '$anno/$mese/__' ORDER BY ora_entrata ASC";

    101- $res = $mysqli->query($sql);
    102- // ciclo per elencare i dati
    103- while ($row = $res->fetch_object())
    Dove $mese e $anno mi servono perchè possa specificare il periodo interessato per la ricerca.
    Ovviamente nel db i dati sono salvati come anno-mese-giorno.
    Ricevo però questo tipo di segnalazione:
    Fatal error: Uncaught mysqli_sql_exception: Unknown column 'data' in 'where clause' in C:\xamppBP\htdocs\sm\residenti\mensili.php:101 Stack trace: #0 C:\xamppBP\htdocs\sm\residenti\mensili.php(101): mysqli->query('SELECT * FROM o...') #1 {main} thrown in C:\xamppBP\htdocs\sm\residenti\mensili.php on line 101
    Non capisco come posso correggere. Oppure esiste un altro sistema per fare la stessa cosa ?
    Magari con un esempio pratico, non sono molto esperto.
    Grazie e buon fine anno

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    L'errore indica che non esiste una colonna chiamata data nella tabella (o meglio, nelle tabelle) su cui stai lavorando: verifica.

    Una volta sistemato questo, non puoi usare LIKE per le date, si usa solo per le stringhe. A meno che tu non abbia fatto l'errore di memorizzare data come stringa anziché come DATE. Puoi invece usare BETWEEN:
    Codice:
    SELECT * FROM ospix, residenti, salastudio
    WHERE residente=cod_res AND ospite=id_SalaStudio AND data BETWEEN "$anno-$mese-01" AND DATE_ADD("$anno-$mese-01", INTERVAL 6 MONTH)

    I suggerimenti che do più spesso:


  3. #3
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie, va benissimo adesso.
    Ho cambiato il valore data con il nome della colonna appropriata.
    Se non è troppo disturbo, mi spieghi perchè serve questa parte :
    Codice PHP:
    .... AND DATE_ADD('$anno-$mese-01', INTERVAL 6 MONTH)";
    Grazie ancora

    P.S. ho tolto i doppi apici che davano errore.

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Se non è troppo disturbo, mi spieghi perchè serve questa parte :
    Codice:
    .... AND DATE_ADD('$anno-$mese-01', INTERVAL 6 MONTH)";
    Certo! Selezionare tutte le righe "appartenenti" ad un certo mese, diciamo dicembre 2018, significa selezionare tutte le righe la cui data è maggiore di 1 dicembre 2018 e minore di 1 gennaio 2018. In generale significa selezionare tutte le righe la cui data è compresa (BETWEEN) tra il primo giorno di un certo mese e (AND) il primo giorno del mese successivo.
    Il primo giorno del mese di interesse è dato da '$anno-$mese-1', questo è facile. Per determinare invece il primo giorno del mese successivo ci sono apposite funzioni e costanti MySQL, ovvero DATE_ADD che prende una data ed un intervallo di tempo e ne restituisce la "somma", e INTERVAL 6 MONTH che indica un intervallo di 6 mesi.
    Tra l'altro ho scritto per sbaglio INTERVAL 6 MONTH, a te interessa un singolo mese quindi dovresti usare INTERVAL 1 MONTH.

    I suggerimenti che do più spesso:


  5. #5
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    OK.
    Grazie mille. Veramente gentile.
    Auguri di Buon ANNO

  6. #6
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Ho un altro quesito, ma aprirò un nuovo messaggio.
    Buona domenica.
    Ultima modifica di pierinik : 30-12-2018 alle ore 06.39.10

  7. #7
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Salve a tutti.
    Riprendo questa discussione perchè ho usato le modalità spiegate in questa discussione per ripetere la ricerca in un altro file, ma stranamente stavolta ricevo questo messaggio:
    Codice:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN '2019-06-01' AND DATE_ADD('2019-06-01', INTERVAL 1 MONTH)' at line 1
    La query impostata è la seguente :
    Codice PHP:
    $query = "SELECT * FROM notturni, residenti, esterni WHERE abitante= cod_res and data_entrata = BETWEEN '$anno-$mese-01' AND DATE_ADD('$anno-$mese-01', INTERVAL 1 MONTH)";
    Sembra che non vada bene la sintassi, eppure uso la stessa procedura che mi aveva suggerito mzanella per il mio bisogno analogo.

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    C'è un "=" di troppo dopo data_entrata. Se controlli il messaggio #2 noterai che non c'era .

    I suggerimenti che do più spesso:


  9. #9
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie mzanella,
    come farei senza il tuo prezioso aiuto.
    Mi tiri fuori sempre dai guai.
    Grazie ancora e alla prossima svista

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •