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

    cercare un singolo record..

    salve,
    ho questa esigenza..
    ho una tebella con dentro delle date di questo tipo
    codice:
    august 04 2007 10:49:00
    che rappresentano le date dei vari gp di F1..
    avrei la necessità che il mio codice prenda solo il record del prossimo gp, escludendo quelli già passati...
    vorrei poi una volta trovato il prossimo gp, che mi memorizzasse il valore dentro una variabile..
    ho pensato a qualcosa del genere.. ma mi prende sempre e cmq l'ultimo record..
    codice:
    //data di oggi
    $dataoggi=date("F d Y H:i:s");
    while($data = mysql_fetch_array($result)){ 
    	echo $conta++;
    	if ($dataoggi < $data[1] ){
    		echo $dataoggi;?>
    <?
    		echo $data[1];?>
    
    <?
    		$quando=$data[1];
    		}
    }
    idee?
    grazie.
    Lunga Vita e prosperità!
    Foto e video di Adriana Lima-->http://www.nasosan.it

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    L'idea é di salvare le date con un formato atto a consentire confronti e calcoli sulle date.

    Il formato ( e ce n'è uno solo anche con varianti) è ssaammgg o ssaa-mm-gg o ssaa/mm/gg. L'importante essendo di avere un formato "ordinato". Il formato della rappresentazione dei dati non è sempre quello in cui bisogna salvare.

    Salvare una data come testo se all'inizio sembra una buona idea perche facile da fare rappresenta alla fin fine un mucchio di lavoro. Siccome i nomi dei mesi non sono nell'ordine crescente, devi sempre leggere tutti i dati della tabella ( o convertire la data prima di filtrare ) mentre con il formato "normale" un semplice :

    select * from tabella where data >= now() limit 0,1 (non sono sicuro della sintassi ma l'idea c'è) ti ricaverebbe il primo record dopo la data odierna.
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da badaze
    L'idea é di salvare le date con un formato atto a consentire confronti e calcoli sulle date.

    Il formato ( e ce n'è uno solo anche con varianti) è ssaammgg o ssaa-mm-gg o ssaa/mm/gg. L'importante essendo di avere un formato "ordinato". Il formato della rappresentazione dei dati non è sempre quello in cui bisogna salvare.

    Salvare una data come testo se all'inizio sembra una buona idea perche facile da fare rappresenta alla fin fine un mucchio di lavoro. Siccome i nomi dei mesi non sono nell'ordine crescente, devi sempre leggere tutti i dati della tabella ( o convertire la data prima di filtrare ) mentre con il formato "normale" un semplice :

    select * from tabella where data >= now() limit 0,1 (non sono sicuro della sintassi ma l'idea c'è) ti ricaverebbe il primo record dopo la data odierna.
    Esatto: ora ti devi sbattere con STR_TO_DATE (ammesso che sia supportato) per convertire la data salvata in quel modo in un datetime più maneggiabile
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    ma è così difficile far confrontare 2 stringhe in php?
    come è bello il basic.....

    cmq..
    ho modificato il database..
    ho fatto 3 campi invece che uno solo..

    e ho provato a cambiare il codice ma non mi trova nulla...
    codice:
    $dataoggi=date("F d Y H:i:s");
    //echo $dataoggi;
    $datamese=date("F");
    $datagiorno=date("d");
    $dataanno=date("y");
    
    
    $db = mysql_connect($dbhost, $DBuser ) or die("Errore durante la connessione al database");
    mysql_select_db($DBName, $db) or die("Errore durante la selezione del database");
    //$sql="SELECT * from $table";
    $sql="select * from $table where `timemese` = '$datamese' AND `timegiorno` = '$datagiorno' AND `timeanno` = '$dataanno' limit 0,1";
    $result=mysql_query($sql, $db);
    Lunga Vita e prosperità!
    Foto e video di Adriana Lima-->http://www.nasosan.it

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non è che è difficile confrontare stringhe... e che agosto viene alfabeticamente e nella consecutio temporum prima di dicembre, però non si può dire lo stesso di marzo, maggio, giugno etc etc... anzi per come salvavi tu le date, "august" è il secondo mese dell'anno...

    La prossima volta che hai a che fare con date, parti direttamente con un campo apposito: le formattazioni in qualsiasi lingua e/o formato le puoi sempre applicare in molta scioltezza all'atto della select.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714

    angolo della curosità :)

    La scelta aaaammgg è fondamentale in quanto permette un facile raffronto se una data viene prima dell'altra, difatti numericamente la data più "vecchia" sarà sempre un numero più piccolo

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da nasosansoft
    ma è così difficile far confrontare 2 stringhe in php?
    come è bello il basic.....

    cmq..
    ho modificato il database..
    ho fatto 3 campi invece che uno solo..

    e ho provato a cambiare il codice ma non mi trova nulla...
    codice:
    $dataoggi=date("F d Y H:i:s");
    //echo $dataoggi;
    $datamese=date("F");
    $datagiorno=date("d");
    $dataanno=date("y");
    
    
    $db = mysql_connect($dbhost, $DBuser ) or die("Errore durante la connessione al database");
    mysql_select_db($DBName, $db) or die("Errore durante la selezione del database");
    //$sql="SELECT * from $table";
    $sql="select * from $table where `timemese` = '$datamese' AND `timegiorno` = '$datagiorno' AND `timeanno` = '$dataanno' limit 0,1";
    $result=mysql_query($sql, $db);
    Il problema non è di avere 3 campi ma bensi uno solo e di fare confronti non con delle stringhe ma con dei numeri. Se usi 3 campi per la data non puoi fare certe operazioni che ti ricordo si possono fare solo con un formato ssaammgg. Prova a fare un solo campo e setta a mano le date con il formato ssaa-mm-gg poi fai una query come quella indicata prima.
    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
    allora..
    ho cambiato ulteriormente il valore del campo nel database..
    è uno, si chiama tempo e contiene un datetime aaa-mm-gg hh:mm:ss
    ho cambiato il codice nel php così:
    codice:
    $dataoggi=date("Y-m-d-H:i:s");
    
    $db = mysql_connect($dbhost, $DBuser ) or die("Errore durante la connessione al database");
    mysql_select_db($DBName, $db) or die("Errore durante la selezione del database");
    $sql="select * from $table where '$dataoggi' <= 'tempo' limit 0,1";
    $result=mysql_query($sql, $db);
    $data=mysql_fetch_row($result);
    ma il risultato è sempre che mi visualizza solo il primo record... qualunque cosa io faccia...

    qualche consiglio?
    grazie infinite x la pazienza e gli aiuti
    Lunga Vita e prosperità!
    Foto e video di Adriana Lima-->http://www.nasosan.it

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Questa estrae un record e basta (o nessuno se la condizione non è soddisfatta)

    SELECT * FROM tabella WHERE NOW() < campo_data ORDER BY campo_data ASC LIMIT 0,1


    Questa estrae tutti i record successivi ad oggi
    SELECT * FROM tabella WHERE NOW() < campo_data ORDER BY campo_data ASC
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10

    forse ho trovato...

    codice:
    //data di oggi
    $dataoggi=date("Y-m-d H:i:s");
    $db = mysql_connect($dbhost, $DBuser ) or die("Errore durante la connessione al database");
    mysql_select_db($DBName, $db) or die("Errore durante la selezione del database");
    $sql="select * from $table where tempo >= '$dataoggi' limit 0,1";
    $result=mysql_query($sql, $db);
    $data=mysql_fetch_row($result);
    così sembra funzionare... ora devo testarlo ancora..ma mi sembra che funzioni.. grazie a tutti.
    Lunga Vita e prosperità!
    Foto e video di Adriana Lima-->http://www.nasosan.it

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.