Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-12-2009, 22:28   #1
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
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
In pratica vorrei mischiare sia l'ordine delle domande che quello delle risposte.
Per mischiare l'ordine delle risposte ho risolto così

Codice:
select *
from risposte
order by id_domanda,rand(),id_risposta
Ma solo con l'impiego di mysql non riesco a mischiare anche l'ordine delle domande.

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
dove l'order by field() in php è diventato dinamico tramite l'utilizzo di un array con tutti gli id sul quale ho applicato la funzione shuffle() e poi l'implode() per la creazione della stringa ma per curiosità mia personale vorrei sapere se il problema è risolvibile col solo impiego di mysql. Ciao e grazie.
john_revelator è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2009, 00:04   #2
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
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);
Come vedete una domanda può anche avere più risposte valide.
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
però la soluzione non mi piace per niente perchè faccio ricorso alla funzione group_concat() di mysql che non è sql standard. Mi potete consigliare una soluzione più "portabile"? Grazie ancora.
john_revelator è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2009, 09:18   #3
kurts
Senior Member
 
L'Avatar di kurts
 
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 307
così?
order by rand(),id_domanda,id_risposta
kurts è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2009, 10:22   #4
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
Iscritto dal: Jul 2007
Messaggi: 1092
Quote:
Originariamente inviato da kurts Guarda i messaggi
così?
order by rand(),id_domanda,id_risposta
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.
john_revelator è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2009, 10:49   #5
kurts
Senior Member
 
L'Avatar di kurts
 
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 307
e con un "GROUP BY id_domanda" come hai fatto nel secondo caso?
kurts è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2009, 10:59   #6
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
Iscritto dal: Jul 2007
Messaggi: 1092
Quote:
Originariamente inviato da kurts Guarda i messaggi
e con un "GROUP BY id_domanda" come hai fatto nel secondo caso?
Non posso usare la clausola group by perchè ovviamente mi verrebbe restituito un record per ciascuna domanda e perderei le possibili risposte a ciascuna di essa.
john_revelator è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2009, 12:25   #7
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
Iscritto dal: Jul 2007
Messaggi: 1092
Quote:
Originariamente inviato da john_revelator Guarda i messaggi
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);
Come vedete una domanda può anche avere più risposte valide.
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
però la soluzione non mi piace per niente perchè faccio ricorso alla funzione group_concat() di mysql che non è sql standard. Mi potete consigliare una soluzione più "portabile"? Grazie ancora.
Mi rispondo da solo. Con questa query sono in grado di trovare tutte le domande a cui è stata data una risposta errata.

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
john_revelator è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
ESA e ClearSpace svilupperanno un satell...
Oracle, stock option da quasi un miliard...
Starship: si è conclusa anticipat...
Un computer quantistico ha funzionato ne...
Sovranità sui dati: AWS è ...
Il nuovo nome della distro Linux mobile ...
Due ventole da 220 mm e non solo: Cooler...
Truffa telefonica via Google Ads: il bro...
Google pensiona le Gems di Gemini: cosa ...
Flight 14: incertezza per un problema a ...
C'è un problema con i robot Tesla: i dip...
Raggi gamma anomali dalla Via Lattea sve...
NIO vende il 30% della divisione scambio...
Sony brevetta un DualSense capace di acc...
Un volto per l'assistenza IA: cosa pu&og...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v