Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di tigerjack
    Registrato dal
    Aug 2003
    Messaggi
    1,661

    [mysql] ottimizzare ricerca, prestazioni su campo DATA

    Ciao,

    ho un tabella di un db cosifatta:
    id | nome | cognome | scadenza

    dove id è l'indice autoincrement, nome e cognome campi text, scadenza è una data nel formato anno-mese-giorno (es.2008-02-10)

    voglio effettuare un interrogaizone sulla tabella affinché, mi estragga dei valori di cui la data di scadenza sia un mese prima quella inserita nel campo "scadenza"...

    come si può fare? tenendo conto che la tabella contiene migliaia di record.. quindi un occhio di riguardo alla presetazioni?

    grazie

  2. #2

    Re: [mysql] ottimizzare ricerca, prestazioni su campo DATA

    Originariamente inviato da tigerjack

    voglio effettuare un interrogaizone sulla tabella affinché, mi estragga dei valori di cui la data di scadenza sia un mese prima quella inserita nel campo "scadenza"...
    Sara' la sindrome del fine settimana .... ma che vuol dire quello che hai scritto? che vuoi visualizzare i record che scadranno fra un mese? Allora sarebbe cosi':

    WHERE campo_scadenza - 1 month = curdate()

    nel caso di scadenza al 2008-03-30 o 31 ti troverai la visualizzazione della scadenza al 2008-02-29 .... quindi il giorno 29 troverai le scadenze di marzo 29-30-31

    se invece la vuoi ragionare a giorni invece che a mesi devi valutare se usare 30 giorni o altro. In effetti le scadenze di solito recitano "30 giorni prima della scadenza..." e non 31 o 28

    vedi tu....

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

  3. #3
    Utente di HTML.it L'avatar di tigerjack
    Registrato dal
    Aug 2003
    Messaggi
    1,661
    grazie!

  4. #4
    Utente di HTML.it L'avatar di tigerjack
    Registrato dal
    Aug 2003
    Messaggi
    1,661
    non va.....

    mi dice: Invalid argument supplied for foreach()

    $query = "SELECT * FROM jos_comprofiler WHERE DATE_SUB(cb_scadenzarinnovo,INTERVAL 1 MONTH)";
    //$query = "SELECT * FROM jos_comprofiler";


    $database->setQuery($query);

    $cars_data = $database->loadObjectList();
    $i=1;
    foreach($cars_data as $car)
    {
    echo "n.".$i;
    echo " - UserId:".$car->user_id;
    echo " - Scadenza/Rinnovo:".$car->cb_scadenzarinnovo."
    ";
    $i++;
    }
    se scrivo cosi, mi da invece i risultati compresi nell'ultimo mese....

    come posso fare?

  5. #5
    ma cos'e' quel where????

    ti veniva troppo difficile scrivere come suggerito????


    WHERE cb_scadenzarinnovo - 1 month = curdate()

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

  6. #6
    Utente di HTML.it L'avatar di tigerjack
    Registrato dal
    Aug 2003
    Messaggi
    1,661
    ciao,

    ho provato a scrivere come mi hai suggerito...
    ma mi da..

    Invalid argument supplied for foreach()


    $query = "SELECT * FROM jos_comprofiler WHERE WHERE cb_scadenzarinnovo - 1 month = curdate()";
    //$query = "SELECT * FROM jos_comprofiler";


    $database->setQuery($query);

    $cars_data = $database->loadObjectList();
    $i=1;
    foreach($cars_data as $car)
    {
    echo "n.".$i;
    echo " - UserId:".$car->user_id;
    echo " - Scadenza/Rinnovo:".$car->cb_scadenzarinnovo."
    ";
    $i++;
    }


    grazie

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da tigerjack
    ciao,

    ho provato a scrivere come mi hai suggerito...
    ma mi da..

    Invalid argument supplied for foreach()


    $query = "SELECT * FROM jos_comprofiler WHERE WHERE cb_scadenzarinnovo - 1 month = curdate()";
    //$query = "SELECT * FROM jos_comprofiler";


    $database->setQuery($query);

    $cars_data = $database->loadObjectList();
    $i=1;
    foreach($cars_data as $car)
    {
    echo "n.".$i;
    echo " - UserId:".$car->user_id;
    echo " - Scadenza/Rinnovo:".$car->cb_scadenzarinnovo."
    ";
    $i++;
    }


    grazie
    con 2 WHERE non da errori???

    hai controllato bene gli articoli?? magari ha ragione mysql...
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    Di WHERE nella query ne basta 1. e poi .... il foreach e' giusto una cosa tua che poco ha a che fare con la query. Quindi .. che ne so sulle funzioni da te utilizzate???

    codice:
    $query = "SELECT * 
                FROM jos_comprofiler 
                WHERE cb_scadenzarinnovo - 1 month = curdate()";
    
    $res = mysql_query($query) or die(mysql_error());
    
    while( $row = mysql_fetch_assoc($res)) {
    
    $pippo[] = $row;
    
    }
    
    echo "<pre>";
    print_r($pippo);

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

  9. #9
    Utente di HTML.it L'avatar di tigerjack
    Registrato dal
    Aug 2003
    Messaggi
    1,661
    mi da quest'errore:
    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 'month = curdate()' at line 3

  10. #10
    manca l'intervallo .... le pecorelle dell'ìintervallo.

    WHERE cb_scadenzarinnovo - INTERVAL 1 month = curdate()";

    abbia pazienza...

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

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.