Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20

Discussione: Una frase al giorno

  1. #1
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,747

    Una frase al giorno

    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

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    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.

  3. #3
    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.

  4. #4
    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)

  5. #5
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,747
    @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

  6. #6
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,747
    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;
    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.
    Errare humanum est, perseverare ovest

  7. #7
    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?
    si.

    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.

  8. #8
    ma la frase, una volta utilizzata, va scartata? o può essere riutilizzata?

  9. #9
    Originariamente inviato da mangusta91
    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 ...

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

  10. #10
    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

    codice:
    SELECT * FROM tabella ORDER BY RAND() WHERE scelta = 0 LIMIT 1;
    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.

    Una volta che le usi tutte potresti riportare tutti i flag a 0 e ricominciare!

    Che te ne pare?

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.