• User Attivo

    php annunci giornalieri o in base all'ora

    Salve ragazzi, sono alle prese con un portale che contiene molti annunci, in pratica chi mi ha commissionato il lavoro vorrebbe che nella home del sito compaiano a rotazione 10 annunci per giorno. Attualmente gli annunci sono random ad ogni refresh della index cambiano annunci. Come potrei risolvere il problema?
    sicuro di una risposta da parte degli esperti porgo i miei saluti.
    Grazie


  • ModSenior

    Ciao colvi,

    Basta un semplice if che controlli la funzione date, per vedere l'ora attuale o il giorno.


  • User Attivo

    Attualmente il codice php che mi crea gli annunci random è il seguente:

    <?
    $query_proposta="SELECT * FROM immobile WHERE abilitato='s' AND proposta='proposta' ORDER BY RAND() LIMIT 10";
    $result_proposta=mysql_query($query_vendita) or die ($query_proposta);
    $numero=mysql_num_rows($result_proposta);
    ?>

    Come dovrei modificarlo gentilmente?


  • User Attivo

    ❌xAncora niente non sono riuscito a risolvere AIUTOOOOOOOOO:?


  • User Attivo

    Ciao,
    un modo, brutto, per avere annunci che cambiano ogni giorno è questo:
    [php]
    $query_proposta="SELECT * FROM immobile WHERE abilitato='s' AND proposta='proposta' ORDER BY RAND(TO_DAYS(NOW())) LIMIT 10";
    [/php]

    In questo modo il seed della funzione RAND() resta invariato durante la giornata e cambia giorno per giorno. Di conseguenza l'ordinamento sarà lo stesso durante la giornata e cambierà da un giorno all'altro.

    Se vuoi farlo "a ore" puoi modificare il seed sostituendo a
    TO_DAYS(NOW())

    
    TO_DAYS(NOW())*100+HOUR(NOW())
    
    

    Perchè allora ti ho detto che è "brutto"?
    Perchè, se non è solo una questione di ordinamento, ovvero hai 10 annunci e il random serve soloo a decidere l'ordine, ma hai ad esempio 20 annunci tra cui scegliere quei dieci, non hai modo di fornire alcuna garanzia che in un certo arco temporale gli annunci abbiano la stessa visibilità, anzi, per assurdo potrebbero esserci uno o più annunci sempre visualizzati ed uno o più annunci mai visualizzati.

    Ovviamente il discorso è valido anche se lasci il tuo vecchio codice. La differenza è solo "temporale". Nella tua versione gli annunci sono scelti a caso ad ogni caricamento della pagina, quindi se carichi la pagina 200 volte al giorno potrai vedere 200 combinazioni diverse di annunci al giorno e 4000 in 20 giorni, mentre con la nuova versione dovresti aspettare 20 giorni per poter vedere solo 20 combinazioni.
    Nel primo caso, avendo a parità di tempo, un campione maggiore di combinazioni, è possibile che "ad occhio" tutti gli annunci risultino visualizzati con equità.
    In realtà in entrambi i casi non hai alcuna garanzia su questo aspetto.

    Se gli annunci riguardano uno stesso inserzionista (che magari è il titolare stesso del sito), questo aspetto potrebbe anche non interessare. Tuttavia, se gli annunci sono ad esempio acquistati da diversi inserzionisti, questo crea non pochi problemi, perchè non puoi garantire ad alcuno la visibilità nemmeno per un giorno.

    Alessandro


  • User Attivo

    @Magicale said:

    Ciao,
    un modo, brutto, per avere annunci che cambiano ogni giorno è questo:
    [php]
    $query_proposta="SELECT * FROM immobile WHERE abilitato='s' AND proposta='proposta' ORDER BY RAND(TO_DAYS(NOW())) LIMIT 10";
    [/php]In questo modo il seed della funzione RAND() resta invariato durante la giornata e cambia giorno per giorno. Di conseguenza l'ordinamento sarà lo stesso durante la giornata e cambierà da un giorno all'altro.

    Se vuoi farlo "a ore" puoi modificare il seed sostituendo a
    TO_DAYS(NOW())

    >
    TO_DAYS(NOW())*100+HOUR(NOW())
    
    >```Perchè allora ti ho detto che è "brutto"?
    Perchè, se non è solo una questione di ordinamento, ovvero hai 10 annunci e il random serve soloo a decidere l'ordine, ma hai ad esempio 20 annunci tra cui scegliere quei dieci, non hai modo di fornire alcuna garanzia che in un certo arco temporale gli annunci abbiano la stessa visibilità, anzi, per assurdo potrebbero esserci uno o più annunci sempre visualizzati ed uno o più annunci mai visualizzati.
     
    Ovviamente il discorso è valido anche se lasci il tuo vecchio codice. La differenza è solo "temporale". Nella tua versione gli annunci sono scelti a caso ad ogni caricamento della pagina, quindi se carichi la pagina 200 volte al giorno potrai vedere 200 combinazioni diverse di annunci al giorno e 4000 in 20 giorni, mentre con la nuova versione dovresti aspettare 20 giorni per poter vedere solo 20 combinazioni. 
    Nel primo caso, avendo a parità di tempo, un campione maggiore di combinazioni, è possibile che "ad occhio" tutti gli annunci risultino visualizzati con equità.
    In realtà in entrambi i casi non hai alcuna garanzia su questo aspetto.
     
    Se gli annunci riguardano uno stesso inserzionista (che magari è il titolare stesso del sito), questo aspetto potrebbe anche non interessare. Tuttavia, se gli annunci sono ad esempio acquistati da diversi inserzionisti, questo crea non pochi problemi, perchè non puoi garantire ad alcuno la visibilità nemmeno per un giorno.
     
    Alessandro
    
    Grazie Alessandro, ho provato a modificare il codice come mi hai gentilmente detto ma gli annunci continuano a cambiare ad ogni refresh di pagina, cosa sbaglio?
    
    Grazie

  • User Attivo

    cosa ho sbagliato?
    Non posso saperlo se non posti il codice che hai usato 🙂

    La query è corretta, o almeno, su MySqul 5.0.51b funziona correttamente (non mi sono ancora aggiornato all'ultima versione)
    Tu quale stai utilizzando?


  • User Attivo

    @Magicale said:

    Non posso saperlo se non posti il codice che hai usato 🙂

    La query è corretta, o almeno, su MySqul 5.0.51b funziona correttamente (non mi sono ancora aggiornato all'ultima versione)
    Tu quale stai utilizzando?
    Ciao Alessandro, la versione è 5.1.6**
    Il codice è il seguente:

    <?
    $query_proposta="SELECT * FROM immobile WHERE abilitato='s' AND proposta='vendita' ORDER BY RAND(TO_DAYS(NOW())*1+HOUR(NOW()) LIMIT 10";
    $result_vendita=mysql_query($query_vendita) or die ($query_vendita);
    $numero=mysql_num_rows($result_vendita);
    ?>
    <?
    if ($numero>0) {
    while ($row_vendita=mysql_fetch_array($result_vendita))
    {
    $query_vend2="SELECT * FROM immagine WHERE id_immobile=$row_vendita[id] ORDER BY 'id' DESC";
    $result_vend2=mysql_query($query_vend2) or die ($query_vend2);
    $row_vend2=mysql_fetch_array($result_vend2);

            $query_vend3="SELECT * FROM provincia WHERE id=$row_vendita[provincia]";
            $result_vend3=mysql_query($query_vend3) or die ($query_vend3);
            $row_vend3=mysql_fetch_array($result_vend3);
            $provincia=$row_vend3[sigla];
            
            $query_vend4="SELECT * FROM comune WHERE id=$row_vendita[comune]";
            $result_vend4=mysql_query($query_vend4) or die ($query_vend4);
            $row_vend4=mysql_fetch_array($result_vend4);
            $comune=$row_vend4[nome_comune];
            $comune1=str_replace(" ", "_",$comune); 
            $comune2=str_replace("'", "_",$comune1);
            
            $typo1=str_replace(" ", "_",$row_vendita[tipologia]); 
            $typo2=str_replace("'", "_",$typo1);
            $typo3=str_replace(" ", "-",$row_vendita[tipologia]); 
            $typo4=str_replace("'", "-",$typo3); ?>
    

    Grazie anticipatamente.
    **