|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
[mysql] - ordinamento casuale record ma condizionato
Buona sera a tutti. Mi sono imbattuto in un problema con mysql e quindi mi ritrovo a chiedere un vostro consiglio.
Ho creato una tabellina che mi serve per la generazione di un questionario che vorrei avesse sia le domande che le risposte in ordine casuale. Codice:
id_risposta id_domanda 1 1 2 1 3 1 4 1 5 2 6 2 7 2 8 2 9 3 10 3 Per mischiare l'ordine delle risposte ho risolto così Codice:
select * from risposte order by id_domanda,rand(),id_risposta Diciamo che ho risolto il problema appoggiandomi al php. Esempio: Codice:
select * from risposte order by field(id_domanda,3,1,2),rand(),id_risposta ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Visto che ci sono ne approfitto anche per fare un'altra domanda.
Per maggiore chiarezza posto un dump di esempio. Codice:
CREATE TABLE `risposte2` ( `id_risposta` int(11) NOT NULL auto_increment, `id_domanda` int(11) default NULL, `risposta` varchar(255) default NULL, `corretta` tinyint(4) default NULL, `answer` tinyint(4) default NULL, PRIMARY KEY (`id_risposta`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1; /*Data for the table `risposte2` */ insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (1,1,'aaaa',1,1); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (2,1,'bbbb',0,0); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (3,1,'cccc',0,0); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (4,1,'dddd',0,0); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (5,2,'eeee',1,1); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (6,2,'ffff',0,0); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (7,2,'gggg',0,0); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (8,2,'hhhh',1,0); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (9,3,'iiii',1,1); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (10,3,'llll',0,0); insert into `risposte2` (`id_risposta`,`id_domanda`,`risposta`,`corretta`,`answer`) values (11,3,'mmmm',0,0); Devo ovviamente verificare il risultato di tale questionario. Io ho scritto la seguente query che funziona Codice:
select id_domanda,if(group_concat(corretta) = group_concat(answer),'corretta','sbagliata') as esito from risposte2 group by id_domanda ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 307
|
così?
order by rand(),id_domanda,id_risposta |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
E' la prima cosa che avevo provato.
![]() Purtroppo non funziona, nel senso che l'ordinamento avviene in maniera del tutto casuale, mentre a me servirebbe che venissero messi prima tutti gli id_domanda 3, poi 1, poi 2 ad esempio. ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 307
|
e con un "GROUP BY id_domanda" come hai fatto nel secondo caso?
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Quote:
Codice:
select distinct r.id_domanda from risposte2 as r left join risposte2 as r2 on r.id_risposta = r2.id_risposta where r.corretta <> r.answer |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:57.