salve,
Daniela83 wrote:
tabella risposte
CREATE TABLE `Questionari`.`Q2` (
`id q2` int(10) unsigned NOT NULL auto_increment,
`voci` varchar(500) NOT NULL,
PRIMARY KEY (`id q2`)
) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=latin1
ROW_FORMAT=DYNAMIC;
tabella riepilogativa
CREATE TABLE `Questionari`.`Q1` (
`id q1` int(11) NOT NULL auto_increment,
`voci` varchar(300) NOT NULL,
`padre` varchar(45) NOT NULL,
`voci_bis` varchar(45) NOT NULL,
PRIMARY KEY (`id q1`)
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=latin1
ROW_FORMAT=DYNAMIC;
tabella scelte
CREATE TABLE `Questionari`.`Scelte` (
`id scelta` int(11) NOT NULL auto_increment,
`voce` varchar(45) NOT NULL,
PRIMARY KEY (`id scelta`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
ROW_FORMAT=DYNAMIC;
tabella che contiene le tre cose
select `id q1`, d.voci as padre, a.voci, padre as p_index, b.voce as voci_bis, b.`id scelta`
from Q1 a
join Q2 d
on a.padre=d.`id q2`
left join Scelte b
on a.voci_bis=b.`id scelta`
la modellazione, per quel che ho capito, mi pare pessima [a dir poco

]..
from Q1 a
join Q2 d
on a.padre=d.`id q2`
dove `padre` varchar(45) = `id q2` int(10)
e lo stesso per
on a.voci_bis=b.`id scelta`
che relazione puo' esserci nei 2 domini, se non derivante da un cast piu' o meno implicito? formalmente e' molto sbagliato...
esempio:
tabella risposte
in famiglia,coi genitori
in famiglia, con i fratelli
padre
madre
cio' sta a significare che, in una colonna, possono essere presenti piu' di una risposta? (> in famiglia,coi genitori) ... se cosi' e', altro errore formale che difficilmente riesci a correggere nell'esplosione di proiezione..
preferirei un'altra relazione molti a molti
#Domande { IdDomanda, TestoDomanda}
#Risposte { IdDomanda, Valore}
una per ogni risposta possibile
tabella scelte
ottimo
buono
molto
abbastanza
direi altra relazione, simile a
#Scelte { IdScelta, Valore}
#RisposteScelte { IdDomanda, IdScelta}
una per ogni scelta possibile
praticamente ho fatto un questionario e le risposte devono essere registrate nel database... cosi ho fatto la tabella risposte dove sono indicate tutte le risposte del questionario, la tabella scelte dove sono registrate tutte le diverse scelte, quindi una tabella riepilogativa che contiene tutti le risposte con le scelte. nella tabella riepilogativa ho fatto un campo con le risposte ("PADRE"), uno dove sono registrate tutte le risposte possibili ("VOCI") e uno dove sono registrate le scelte (VOCI_BIS)
praticamente ho
q1 I tuoi genitori sono
- sposati
-divorziati
q2 com'è il rapporto
ottimo buono pessimo
-padre
-madre
q3 quanto parli con
poco abbast molto
-famiglia
-amici
-prof
etc.
ho registrato tutte le domande, tutte le risposte, tutte le scelte nella tabella riepilogativa ho fatto un select che selezionasse le domande (padre), tutte le possibili risposte di ogni domanda (voci), e poi ho fatto un campo voci_bis per inserire le scelte.
solo per le risposte alla domanda q2 devo solo poter scegliere le scelte indicate e quindi devo solo visualizzare quello nelle opzioni.
ripeto, a mio parere pare tutto molto sbagliato.. non conosco le finalita' di analisi ed a cosa vuoi in effetti addivenire, ma personalmente imbastirei un modello molto simile a (codice per SQL Server):
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.Domande (
[IdDomanda] int NOT NULL /
IDENTITY/ PRIMARY KEY,
[testo] varchar(500) NOT NULL,
);
CREATE TABLE dbo.Risposte (
[IdRisposta] int NOT NULL /
IDENTITY/ PRIMARY KEY,
[testo] varchar(500) NOT NULL,
);
CREATE TABLE dbo.RisposteDomande (
[IdDomanda] int NOT NULL
CONSTRAINT fk_RisposteDomande$has$Domanda
FOREIGN KEY REFERENCES dbo.Domande (IdDomanda),
[IdRisposta] int NOT NULL
CONSTRAINT fk_RisposteDomande$has$Risposta
FOREIGN KEY REFERENCES dbo.Risposte (IdRisposta),
CONSTRAINT pk_RisposteDomande
PRIMARY KEY ([IdDomanda] ,[IdRisposta] )
);
GO
INSERT INTO dbo.Risposte VALUES ( 1, 'Sposati' );
INSERT INTO dbo.Risposte VALUES ( 2, 'Divorziati' );
INSERT INTO dbo.Risposte VALUES ( 3, 'Vedovi' );
INSERT INTO dbo.Risposte VALUES ( 4, 'Ottimo' );
INSERT INTO dbo.Risposte VALUES ( 5, 'Buono' );
INSERT INTO dbo.Risposte VALUES ( 6, 'Pessimo' );
INSERT INTO dbo.Risposte VALUES ( 7, 'Molto' );
INSERT INTO dbo.Risposte VALUES ( 8, 'Abbastanza' );
INSERT INTO dbo.Risposte VALUES ( 9, 'Poco' );
INSERT INTO dbo.Domande VALUES ( 1, 'I tuoi genitori sono' ); INSERT INTO dbo.RisposteDomande VALUES ( 1, 1 );
INSERT INTO dbo.RisposteDomande VALUES ( 1, 2 );
INSERT INTO dbo.RisposteDomande VALUES ( 1, 3 );
INSERT INTO dbo.Domande VALUES ( 2, 'Com''e'' il tuo rapporto con tuo padre' );
INSERT INTO dbo.RisposteDomande VALUES ( 2, 4 );
INSERT INTO dbo.RisposteDomande VALUES ( 2, 5 );
INSERT INTO dbo.RisposteDomande VALUES ( 2, 6 );
INSERT INTO dbo.Domande VALUES ( 3, 'Com''e'' il tuo rapporto con tua madre' );
INSERT INTO dbo.RisposteDomande VALUES ( 3, 4 );
INSERT INTO dbo.RisposteDomande VALUES ( 3, 5 );
INSERT INTO dbo.RisposteDomande VALUES ( 3, 6 );
INSERT INTO dbo.Domande VALUES ( 4, 'Quanto parli con i tuoi professori' ); INSERT INTO dbo.RisposteDomande VALUES ( 4, 7 );
INSERT INTO dbo.RisposteDomande VALUES ( 4, 8 );
INSERT INTO dbo.RisposteDomande VALUES ( 4, 9 );
GO
SELECT *
FROM dbo.Domande d
JOIN dbo.RisposteDomande rd
ON rd.IdDomanda = d.IdDomanda
JOIN dbo.Risposte r
ON rd.IdRisposta= r.IdRisposta
--WHERE d.IdDomanda = @Param
GO
DROP TABLE dbo.RisposteDomande, dbo.Risposte, dbo.Domande;
--<------
IdDomanda testo IdDomanda IdRisposta IdRisposta testo
---------
-------------------------------------
---------
---------
---------
------------
1 I tuoi genitori sono 1 1 1 Sposati
1 I tuoi genitori sono 1 2 2 Divorziati
1 I tuoi genitori sono 1 3 3 Vedovi
2 Com'e' il tuo rapporto con tuo padre 2 4 4 Ottimo
2 Com'e' il tuo rapporto con tuo padre 2 5 5 Buono
2 Com'e' il tuo rapporto con tuo padre 2 6 6 Pessimo
3 Com'e' il tuo rapporto con tua madre 3 4 4 Ottimo
3 Com'e' il tuo rapporto con tua madre 3 5 5 Buono
3 Com'e' il tuo rapporto con tua madre 3 6 6 Pessimo
4 Quanto parli con i tuoi professori 4 7 7 Molto
4 Quanto parli con i tuoi professori 4 8 8 Abbastanza
4 Quanto parli con i tuoi professori 4 9 9 Poco
saluti