Ho un centinaio di citazioni memorizzate in un database e dovrei pubblicarne una al giorno.
Come si potrebbe fare concettualmente?
Ho un centinaio di citazioni memorizzate in un database e dovrei pubblicarne una al giorno.
Come si potrebbe fare concettualmente?
Errare humanum est, perseverare ovest
Con una select le recuperi tutte, le metti in un array e ne peschi una a caso generando un numero casuale da usare come indice dell'array.
Metti un contatore che memorizzi incrementando il numero delle uscite e scegli tra i valori minori.
order by contatore
limit 1
update tabella set contatore = contatore + 1 where id = id_estratto
![]()
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
Sicuramente non performante per una gran mole di dati, ma nel tuo caso putresti utilizzare semplicemente una cosa del tipo:
codice:SELECT * FROM tabella ORDER BY RAND() LIMIT 1;
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
@piero.mac
Grazie, l'idea mi sembra buona, però se viene inserita una nuova citazione il relativo contatore sarebbe a zero e comparirebbe sempre la stessa finchè il conteggio non si parifica alle altre.
Si che al momento dell'inserimento potrei aggiornare il contatore a quello più alto ma se in questa fase qualcosa non funziona il problema sopracitato persisterebbe.
ora mi è venuto in mente qualcosa di indipendente da un contatore ossia l'aggiunta un campo 'date'. Quindi lo script va a cercare se esiste un record con la data odierna, se la trova pubblica la relativa citazione.
Se non trova la data odierna l'aggiunge nel primo campo 'date' vuoto o con la data antecedente più lontana, naturalmente raggiunta la fine della tabella torna all'inizio.
E' forse troppo macchinoso?
Errare humanum est, perseverare ovest
Purtroppo deve essere pubblicata una al giorno per tutti. Così ad ogni richiesta cambierebbe o se per risolvere usassi le sessioni comunque sarebbe differente per differenti visitatori.Originariamente inviato da satifal
Sicuramente non performante per una gran mole di dati, ma nel tuo caso putresti utilizzare semplicemente una cosa del tipo:
codice:SELECT * FROM tabella ORDER BY RAND() LIMIT 1;
Errare humanum est, perseverare ovest
si.Originariamente inviato da carlo2002
@piero.mac
ora mi è venuto in mente qualcosa di indipendente da un contatore ossia l'aggiunta un campo 'date'. Quindi lo script va a cercare se esiste un record con la data odierna, se la trova pubblica la relativa citazione.
Se non trova la data odierna l'aggiunge nel primo campo 'date' vuoto o con la data antecedente più lontana, naturalmente raggiunta la fine della tabella torna all'inizio.
E' forse troppo macchinoso?
fai come hai pensato. Quando aggiungi una nuova citazione assegni a quel contatore il valore di contatore minimo della tabella in modo da evitare sia sempre la stessa citazione.
select min(contatore) as basso from tabella
insert bla bla .... values (bla bla, $basso) bunga bunga....
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
ma la frase, una volta utilizzata, va scartata? o può essere riutilizzata?
Lo dovrebbe dire lui, ma pensando in modo razionale direi che una volta ciclate tutte le citazioni (cioe' contatori allo stesso livello) dovrebbe alimentare la tabella con nuovi record o riprendere il ciclo ...Originariamente inviato da mangusta91
ma la frase, una volta utilizzata, va scartata? o può essere riutilizzata?
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
la mia possibile soluzione:
nella tabella del db inserisci un campo, che chiami ad esempio "scelta", e di default dai il valore 0 a tutte le citazioni. Ogni giorno fai la query
Dopo che ti ritorna, fai una seconda query dove aggiorni il valore 0 in valore 1. In tal modo quella citazione sarà scartata le prossime volte.codice:SELECT * FROM tabella ORDER BY RAND() WHERE scelta = 0 LIMIT 1;
Una volta che le usi tutte potresti riportare tutti i flag a 0 e ricominciare!
Che te ne pare?