PHPBBIntegrare PHPBB PHPFunzioni PHP CFunzioni C EcologiaLa mia ecologia   Chi siamoChi è Senamion HomeHome page corner Il Web e l'ecologia

Senamion


Chi siamo:

Il web e l'ecologia, condividere il web e un momento di riflessione sullo stato dell'ecologia e sul suo futuro

Google

[PHP] La ricetta del mese o il disco del giorno

18 Ottobre 2006 by Giovanni | Argomenti: , , | 3983

Spesso si sente l’esigenza di avere, magari in home page, un dato che cambia ogni giorno, o ogni mese. Per questo il post l’ho intitolato “la ricetta del mese” o “il disco del giorno”, perchè spesso è proprio in portali che trattano di singoli argomenti che si vuole evidenziare randomicamente un elemento del DB.

Ecco una soluzione veramente semplice ed efficace. Chiaramente qui riportiamo solo la query di accesso a DB di una generica tabella ricette (e dischi) che ci serviranno come esempio.

La ricetta del mese:

$qry = "SELECT * FROM ricette ORDER BY RAND(" . date('n') * date('Y') . ") LIMIT 1";

Il disco del giorno:

$qry = "SELECT * FROM dischi ORDER BY RAND(" . date('n') * date('Y') * date('d') . ") LIMIT 1";

Chiaramente il tutto va personalizzato. Ad esempio se abbiamo una votazione del disco e vogliamo inserire solo i dischi che hanno 10 (ad esempio) come voto, per un ipotetico link che titoli “oggi vi segnaliamo questo splendido disco:”, è sufficiente aggiungere alla query segnalata sopra la clausole WHERE:

Oggi vi segnaliamo questo splendido disco:

$qry = "SELECT * FROM dischi WHERE voto = 10 ORDER BY RAND(" . date('n') * date('Y') * date('d') . ") LIMIT 1";

Cosa vi siete inventati voi?

Pubblicato in Funzioni e classi PHP e C |

2 Commenti a “[PHP] La ricetta del mese o il disco del giorno”

  1. dharma scrive:

    Bella idea, davvero, anche se il funzionamento mi sfugge..

    Ad es un ORDER BY RAND(1000) su che campo esegue l’ordinamento?

    IMPORTANTE RICORDARSI di usare questo trucco solo nel caso di db con poche righe! Un numero elevato di righe rallenta il processore che esegue mysql!

  2. Giovanni scrive:

    ORDER BY rand() esegue un ordinamento randomico, quindi non è importante la chiave di ordinamento (che non c’è!)
    La logica è che se passo a rand un valore lui mi ritorna sempre lo stesso record. Quindi se ogni giorno passo un valore diverso ho un ordinamento diverso ogni giorno e quindi prendo un record diverso ogni giorno. Se invece passo un valore diverso ogni mese farò in modo di avere un record diverso ogni mese.
    Sul rallentamento credo che utilizzando comunque un “limit 1″ non dovrebbero vedersi grossi rallentamenti.

Scrivi un commento