Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [mysql] Problema con DATE_FORMAT

    Ciao a tutti , volevo utilizzare le funzioni DATE_FORMAT() e STR_TO_DATE() per la formattazione delle date da AAAA-MM-GG a GG-MM-AAAA e viceversa ma non ci sono riuscita .

    La parte di codice con la SELECT che uso e:
    leggi.php
    Codice PHP:
        if(true) {
            
    $sql_order "ORDER BY data DESC";
        } else {
            
    $sql_order "ORDER BY data DESC";
        }

    if (
    $alphabet) {
        
    $sql "SELECT DISTINCT $table.* FROM $base_from_where AND LEFT(data,1) = '$alphabet' ".$sql_order;
      } else{
        
    $sql "SELECT DISTINCT $table.* FROM $base_from_where ".$sql_order;
        }
        
    $result mysql_query($sql);
        
    $resultsnumber mysql_numrows($result); 
    Mentre per l'INSERT e:
    scrivi.php
    Codice PHP:
            $sql "INSERT INTO $table (nome,    data,   citta,    indirizzo,    created, modified)
                            VALUES ('
    $nome','$data', '$citta', '$indirizzo', now(),   now())";
        
    $result mysql_query($sql); 
    Ho provato con :
    Codice PHP:
        if(true) {
            
    $sql_order "ORDER BY data DESC";
        } else {
            
    $sql_order "ORDER BY data DESC";
        }

    if (
    $alphabet) {
        
    $sql "SELECT DISTINCT $table.* FROM $base_from_where AND LEFT(data,1) = '$alphabet' ".$sql_order;
      } else{
        
    $sql "SELECT DISTINCT $table.* FROM $base_from_where ".$sql_order;
        }
        
    $result mysql_query($sqlDATE_FORMAT(data'%d %m %y'));
        
    $resultsnumber mysql_numrows($result); 
    Codice PHP:
            $sql "INSERT INTO $table (nome,    data,   citta,    indirizzo,    created, modified)
                            VALUES ('
    $nome','$data', '$citta', '$indirizzo', now(),   now())";
        
    $result mysql_query($sqlSTR_TO_DATE(data'%d %m %y')); 
    ma nulla, la data non viene inserita nel campo di tipo DATE nel db e non viene letta .
    Premetto che le due parti di codice originali mi funzionano ma mi danno come formattazione quella inglese (AAAA-MM-GG).
    Sono sicura che sbaglio nell'usare le due funzioni...

    Grazie in anticipo a chi rispondera'
    Saluti
    Milena

  2. #2
    azz... codice creativo.

    mi sono fermato qui alle prime righe. Spiegami cosa vorresti fare

    Codice PHP:
    if(true) {
            
    $sql_order "ORDER BY data DESC";
        } else {
            
    $sql_order "ORDER BY data DESC";
        } 

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

  3. #3
    Originariamente inviato da piero.mac
    azz... codice creativo.

    mi sono fermato qui alle prime righe. Spiegami cosa vorresti fare

    Codice PHP:
    if(true) {
            
    $sql_order "ORDER BY data DESC";
        } else {
            
    $sql_order "ORDER BY data DESC";
        } 
    Ciao Piero e grazie per la tempestivita' , la parte di codice :
    Codice PHP:
    if(true) { 
            
    $sql_order "ORDER BY data DESC"
        } else { 
            
    $sql_order "ORDER BY data DESC"
        } 

    if (
    $alphabet) { 
        
    $sql "SELECT DISTINCT $table.* FROM $base_from_where AND LEFT(data,1) = '$alphabet' ".$sql_order
      } else{ 
        
    $sql "SELECT DISTINCT $table.* FROM $base_from_where ".$sql_order
        } 
        
    $result mysql_query($sql); 
        
    $resultsnumber mysql_numrows($result); 
    la utilizzo per leggere i dati dal db nel formato
    2010-04-24
    2010-04-14
    2010-03-10
    ......
    vorrei formattare la data con la funzione DATE_FORMAT e fare in modo da avere:
    24-04-2010
    14-04-2010
    10-03-2010
    ......

    stessa cosa con:
    Codice PHP:
    $sql "INSERT INTO $table (nome,    data,   citta,    indirizzo,    created, modified) 
                            VALUES ('
    $nome','$data', '$citta', '$indirizzo', now(),   now())"
        
    $result mysql_query($sql); 
    pero' facendo la cosa inversa con la funzione STR_TO_DATE.

    Grazie in anticipo
    Milena

  4. #4
    prima di analizzare il perche' renditi conto che quella if e' una cosa di pura fantasia. poi subito dopo ti presenti con un errore di SQL improponibile:

    $sql = "SELECT DISTINCT $table.* FROM $base_from_where AND LEFT(data,1)

    capisci che di fronte a queste cose non si puo' esprimere nulla?


    comunque sperando ti posa aiutare nel date_format la sintassi e':

    select *, date_format(created, '%d-%m-%Y') as data

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

  5. #5
    Originariamente inviato da piero.mac
    prima di analizzare il perche' renditi conto che quella if e' una cosa di pura fantasia. poi subito dopo ti presenti con un errore di SQL improponibile:

    $sql = "SELECT DISTINCT $table.* FROM $base_from_where AND LEFT(data,1)

    capisci che di fronte a queste cose non si puo' esprimere nulla?


    comunque sperando ti posa aiutare nel date_format la sintassi e':

    select *, date_format(created, '%d-%m-%Y') as data
    Ciao Piero, mi devi scusare ma non sono molto pratica , ho provato a modificare il tutto senza if else in modo diverso :
    Codice PHP:
       $sql="SELECT DISTINCT $table.* FROM $base_from_where ";
       
    $result mysql_query($sql);
       
    $resultsnumber mysql_numrows($result); 
    ora ho provato a inserire il date_format :
    Codice PHP:
       $sql="SELECT *, date_format(created, '%d-%m-%Y') as data $table.* FROM $base_from_where ";
       
    $result mysql_query($sql);
       
    $resultsnumber mysql_numrows($result); 
    ma nulla , mi legge le date in modo errato e non le mette in ordine decrescente .

    Come posso risolvere?

    Milena

  6. #6
    Che non sei molto pratica diciamo che cominciavo ad averne il dubbio. Fai troppi errori proprio di forma. Quindi il risultato non potra' mai esserci almeno fino a quando non sarai sintatticamente corretta.

    vedi qui:

    $sql="SELECT DISTINCT $table.* FROM $base_from_where ";

    allora nell'elenco dei campi da selezionare chiami la tabella $table. Nel FROM che e' l'origine dei dati la tabella si chiama $base_from_where nome tra l'altro abbastanza curioso ma totalmente diverso dalla tabella in cui selezioni i campi. Quindi:

    $table deve essere identico a quello che tu hai messo in $base_from_where

    l'altra query:

    $sql="SELECT *, date_format(created, '%d-%m-%Y') as data $table.* FROM $base_from_where ";

    ma cos'e' sta roba: as data $table.* FROM $base_from_where

    vale lo stesso discorso di prima con in piu' un errore di sintassi ed una richiesta ulteriore di $table.*

    ma cosa hai dentro $base_from_where? la cosa mi incuriosisce

    e per finire che funzione e' mysql_numrows()? comunque errori a parte (sic!) come fai a dire che non ti mette in ordine un qualcosa che non estrai per niente?

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

  7. #7
    Ci sono riuscita grazie ai tuoi suggerimenti .
    Il codice riesce a mostrare un elenco date in ordine decrescente:
    Codice PHP:
    $sql "select *, date_format(data, '%d-%m-%Y') as dataformat FROM $base_from_where ORDER BY data DESC";
    $result mysql_query($sql);
    $resultsnumber mysql_numrows($result); 
    ora vorrei fare la stessa cosa alla rovescia modificando:
    Codice PHP:
    $sql "INSERT INTO $table (nome,    data,   citta,    indirizzo,    created, modified) 
                            VALUES ('
    $nome','$data', '$citta', '$indirizzo', now(),   now())"
    $result mysql_query($sql); 
    cioe' inserisco gg-mm-aaaa e le date vengono inserite nel db nella forma aaaa-mm-gg.
    come posso fare? E giusto usare STR_TO_DATE ?
    Piero ti ringrazio ancora per l'aiuto .

    Originariamente inviato da piero.mac
    ma cosa hai dentro $base_from_where? la cosa mi incuriosisce
    Originariamente inviato da piero.mac
    e per finire che funzione e' mysql_numrows()?
    in origine era una rubrica con un elenco nome, data, indirizzo, ecc , ora la sto' personalizzando per ordinare le righe per data...
    Molte parti del codice sono prese da script di esempio (tipo Address Book), ecco perche' hanno quei nomi .

    Milena

  8. #8
    Non saprei dirti con sicurezza senza provare se str_to_date() ti passa il valore nell'insert oppure se devi settare prima una variabile. Comunque puoi fare la cosa sia con il php (vedi un recentissimo post QUI ) sia con una variabile o direttamente con mysql.

    Es.:
    Codice PHP:
    // con variabile
    mysql_query("set @data = str_to_date('25/04/2010', '%d/%m/%Y') ");

    $sql "INSERT INTO $table (nome,    data,   citta,    indirizzo,    created, modified)
                            VALUES ('
    $nome', @data, '$citta', '$indirizzo', now(),   now())";

    $result mysql_query($sql);

    // direttamente
    $sql "INSERT INTO $table (nome,    data,   citta,    indirizzo,    created, modified)
                            VALUES ('
    $nome', str_to_date('25/04/2010', '%d/%m/%Y'), 
                                       '
    $citta', '$indirizzo', now(),   now())";

    $result mysql_query($sql); 
    Personalmente preferisco evitare di inserire direttamente nel db i dati provenienti dall'esterno anche perche' vorrei validarli a priori. Quindi userei la funzione php che ho citato e trovi nel link. Ovviamente adattata al tuo uso e controllando la validita' del risultato ottenuto.

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

  9. #9
    Funziona :

    Codice PHP:
    $sql "INSERT INTO $table (nome,    data,   citta,    indirizzo,    created, modified) 
                            VALUES ('
    $nome',str_to_date('$data', '%d/%m/%Y'), '$citta', '$indirizzo', now(),   now())"
    $result mysql_query($sql); 
    Grazie mille Piero...

    Provo a fare altre modifiche e ti faccio sapere

    Saluti
    Milena

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