• User Newbie

    query sql

    ho un database e una tabella in cui, tra le altre cose, ho inserito delle date!
    Desidererei sapere come fare per selezionare da questa tabella tutte le righe che si riferiscono solo alla settimana corrente!
    Grazie


  • User Attivo

    A occhio e croce proverei una query del genere

    
    SELECT campo1, campo2 FROM tabella WHERE campo_data < DATE_SUB&#40;CURDATE&#40;&#41;,INTERVAL 7 DAY&#41;;
    
    

    Non sono sicuro che sia giusto prova, anche perchè tiene conto degli ultimi 7 giorni non della settimana corrente :mmm:


  • User Newbie

    no no.....non funziona
    grazie cmq


  • User Attivo

    @ANNY85 said:

    no no.....non funziona
    grazie cmqEffettivamente non funziona...

    In ogni caso credo di aver risolti il mistero. Ti mostrerò come è possibile fare quello che hai chiesto. Premetto che è un modo che ho ideato in base alle mie conoscenze non escludo che possa esserci un metodo migliore (o più semplice)

    Ti consiglio di editare una nuova tabella MySQL e 2 file .php senza andare a modificare le tue pagine originali. Ti consiglio questo in modo che possa prima prendere confidenza con la funzionalità che poi valuterai se implementarla o no.

    Tabella MySQL

    
    CREATE TABLE `nomi` &#40;
      `id` int&#40;10&#41; unsigned NOT NULL auto_increment,
      `nome` varchar&#40;64&#41; NOT NULL default '',
      `data` datetime NOT NULL default '0000-00-00 00:00&#58;00',
      `data_num` int&#40;10&#41; unsigned NOT NULL default '0',
      `real_date` varchar&#40;50&#41; NOT NULL default '',
      PRIMARY KEY  &#40;`id`&#41;
    &#41; TYPE=MyISAM AUTO_INCREMENT=41 ;
    
    

    La tabella ha 5 campi:

    1. Un id univoco per ogni record con attributo auto_increment
    2. Il nome che inseriremo nella tabella attraverso un form HTML
    3. Una data ISO8601 conosciuta anche come formato standard ANSI SQL
    4. La stessa data del precedente punto trasformata in giorni (sarà pertanto rappresentata da un numero intero)
    5. La stessa data dei punti 3 e 4 in formato esteso che conterrà il giorno della settimana in Inglese (questa non servirebbe ma è utile per capire se poi lo script ha funzionato).

    La pagina di inserimento dei nomi:

    
    <?php
    $data_ora="select now&#40;&#41;;";
    $result_data_ora=mysql_query&#40;$data_ora&#41; or print&#40;"
    Non ho visto la data e l'ora attuale
    "&#41;;
    $d_t=mysql_fetch_row&#40;$result_data_ora&#41; or print&#40;"
    Non posso farti vedere la data e l'ora attuale 
    "&#41;;
    
    $f="select to_days&#40;now&#40;&#41;&#41;;";
    $e=mysql_query&#40;$f&#41; or print&#40;"
    error
    "&#41;;
    $d_t2=mysql_fetch_row&#40;$e&#41; or print&#40;"
    Non posso farti vedere la data e l'ora attuale 
    "&#41;;
    
    $rd=date&#40;"l d F Y"&#41;;
    ?>
    <form method="POST" action="insert.php">
    Inerisci un nome adesso&#58;
    <input type="varchar" name="nome" size ="50" maxlength="200">
    <input type="hidden" name="d_ttime" value="<?php print&#40;"$d_t&#91;0&#93;"&#41;; ?>">
    <input type="hidden" name="date_num" value="<?php print&#40;"$d_t2&#91;0&#93;"&#41;; ?>">
    <input type="hidden" name="real_date" value="<?php print&#40;"$rd"&#41;; ?>">
    <input type="submit" value="Invia il nome">
    </form>
    
    

    Ricordo che mancano i dati per la connessione al server MySQL.

    La pagina che inserirà il nome immesso nel form e allo stesso tempo visualizzerà tutti gli inserimenti della settimana corrente a partire dal Lunedì.

    
    # insert.php
    
    
    <?php
    $inn="insert into nomi values&#40;'','$_POST&#91;nome&#93;','$_POST&#91;d_ttime&#93;','$_POST&#91;date_num&#93;','$_POST&#91;real_date&#93;'&#41;;";
    $mm=mysql_query&#40;$inn&#41; or print&#40;"
    tabella non aggiornata
    "&#41;;
    print&#40;"
    Il nome **$_POST&#91;nome&#93;** &egrave; stato aggiunto alla tabella nomi.<hr />"&#41;;
    $f="select to_days&#40;now&#40;&#41;&#41;;";
    $e=mysql_query&#40;$f&#41; or print&#40;"
    error
    "&#41;;
    $d_t2=mysql_fetch_row&#40;$e&#41; or print&#40;"
    Non posso farti vedere la data e l'ora attuale 
    "&#41;;
    
    $day=date&#40;"w"&#41;;
    if&#40;$day==0&#41;
    $start_week=$d_t2&#91;0&#93;-7;
    else
    $start_week=$d_t2&#91;0&#93;-$day;
    
    $selezione="select nome, real_date from nomi where data_num > '$start_week';";
    $set=mysql_query&#40;$selezione&#41; or print&#40;"
    dati non selezionati
    "&#41;;
    print&#40;"
    Di seguito i nomi aggiunti nella settimana corrente.
    <hr />"&#41;;
    while&#40;$array=mysql_fetch_assoc&#40;$set&#41;&#41;
    &#123;
    foreach&#40;$array as $c => $v&#41;
    &#123;
    $v = htmlspecialchars&#40;$v&#41;;
    if&#40;!$array&#91;$c&#93; == ""&#41;
    &#123; printf&#40;"$array &#91; $c &#93; &#58;  **$v**
    \r"&#41;; &#125;
    else
    &#123; printf&#40;"$array &#91; $c &#93; &#58;  valore NULL**
    \r"&#41;; &#125;
    &#125;
    print&#40;"<hr />"&#41;;
    &#125;
    mysql_free_result&#40;$set&#41;;
    ?>
    
    

    I file sono stati testati su:

    -- Versione MySQL: 4.0.25
    -- Versione PHP: 4.3.11

    Ribadisco che questa soluzione è ideata in base alle mie scarse conoscenze può darsi che ci sia un altro metodo che non debba necessariamente andare a sconvolgere la tua (gia esistente) tabella che contiene gli articoli.