Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    5

    [MySQL] Il random ordinato

    Salve a tutti, avrei bisogno di una mano per una query.

    Ho due tabelle:
    Tabella domande

    http://s16.postimg.org/5etuv6b69/html1.png

    E una tabella risposte

    http://s27.postimg.org/d5r9vtpj7/html2.png


    Ad una domanda possono essere associate più risposte quindi l' iddomanda nella tabella risposte equivale all'id della domanda.
    Se volessi selezionare tutto dalle due tabelle dove gli id delle risposte siano uguali agli id delle domande farei semplicemente un
    Select * From domande,risposte WHERE domande.id = risposte.iddomanda

    Il mio problema è nel randomizzare le righe. Se mettessi l'operazione ORDER BY rand() alla fine della query sopra citata otterrei qualcosa del genere:

    http://s16.postimg.org/pl1y7sw7p/html3.png

    Essendo una pagina php per la gestione di un quiz per me è impossibile avere le risposte della domanda 4 all'inizio dell'array e alla fine. Quindi avrei bisogno di raggruppare gli id delle risposte, casualmente, con gli id delle domande, casualmente.

    Per esempio:

    Domanda 2 risposta 3
    Domanda 2 risposta 1
    Domanda 2 risposta 2
    Domanda 4 risposta 1
    Domanda 4 risposta 4
    Domanda 4 risposta 3
    Domanda 4 risposta 2

    Accetto qualsiasi consiglio
    Grazie mille in anticipo

  2. #2
    Un abbinamento prevede un ugual numero di domande e di risposte. Potresti usare group by per avere tutte le risposte abbinate alle domande ma poi un ordinamento randomizzato mescolerebbe anche l'ordine delle domande.

    Se ti va bene una idea potrebbe essere:

    select domanda, risposta
    from domande, risposte
    where domande.id = risposte.iddomanda
    group by domanda, risposta
    order by domande.id

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

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    La butto cosi.
    Hai provato : order by id, rand()
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    5
    Se provo con :
    order by domande.id , rand()
    Le risposte vengono mescolate ma comunque le domande restano in ordine

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    E questo non ti va ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    5
    Io vorrei fare in modo che anche le domande siano mischiate oltre alle risposte

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Hai provato : order by rand(), rand()
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    5
    In questo modo le risposte non sono successive ma sparpagliate in mezzo alle altre

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova questo (forse da addattare)

    codice HTML:
    SELECT * FROM domande T1
    inner join risposte T3 on T1.id= T3.iddomanda
    inner join (select id, rand() as casuale from domande) T2 on T2.id= T1.id
    order by casuale, rand()
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    5
    Dopo un po di prove mi è uscita una cosa del genere:
    SELECTt.id,t1.iddomanda,t.question,t1.answerFROM(SELECTid,domandaasquestionFROMLettereORDERBYRAND())tLEFTJOIN(SELECTiddomanda,rispostaasanswerFROMLettereRisposteOrderbyrand())t1ont1.iddomanda=t.id

    e devo dire che funziona per ora!


    PS anche la tua, dopo pochi adattamenti di nomi, funziona !

Tag per questa discussione

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.