[PHP/MySQLi] 3 loops in elkaar
Ik ben bezig met een vragenlijst aan 't maken enkel moet deze vragenlijst uit 3 tabellen opgebouwd worden;
vragenlijst, kop, groep
kop is gekoppeld aan een vraag en moet een kop weergeven voor de aangegeven vraag#, groep is gekoppeld aan een vraag# of vraag # t/m # dit wil ik gebruiken voor puntentelling.
de vragenlijst database ziet er zo uit ;
Quote:
CREATE TABLE `vragenlijst` (
`id` INT NOT NULL AUTO_INCREMENT,
`mid` INT(9),
`date` DATETIME,
`vraag1` VARCHAR(255),
`antwoord1` VARCHAR(255),
`vraag2` VARCHAR(255),
`antwoord2` VARCHAR(255),
`vraag3` VARCHAR(255),
`antwoord3` VARCHAR(255),
`vraag4` VARCHAR(255),
`antwoord4` VARCHAR(255),
`vraag5` VARCHAR(255),
`antwoord5` VARCHAR(255),
`vraag6` VARCHAR(255),
`antwoord6` VARCHAR(255),
`vraag7` VARCHAR(255),
`antwoord7` VARCHAR(255),
`vraag8` VARCHAR(255),
`antwoord8` VARCHAR(255),
`vraag9` VARCHAR(255),
`antwoord9` VARCHAR(255),
`vraag10` VARCHAR(255),
`antwoord10` VARCHAR(255),
`vraag11` VARCHAR(255),
`antwoord11` VARCHAR(255),
`vraag12` VARCHAR(255),
`antwoord12` VARCHAR(255),
`vraag13` VARCHAR(255),
`antwoord13` VARCHAR(255),
`vraag14` VARCHAR(255),
`antwoord14` VARCHAR(255),
`vraag15` VARCHAR(255),
`antwoord15` VARCHAR(255),
`vraag16` VARCHAR(255),
`antwoord16` VARCHAR(255),
`vraag17` VARCHAR(255),
`antwoord17` VARCHAR(255),
`vraag18` VARCHAR(255),
`antwoord18` VARCHAR(255),
`vraag19` VARCHAR(255),
`antwoord19` VARCHAR(255),
`vraag20` VARCHAR(255),
`antwoord20` VARCHAR(255),
`vraag21` VARCHAR(255),
`antwoord21` VARCHAR(255),
`vraag22` VARCHAR(255),
`antwoord22` VARCHAR(255),
`vraag23` VARCHAR(255),
`antwoord23` VARCHAR(255),
`vraag24` VARCHAR(255),
`antwoord24` VARCHAR(255),
`vraag25` VARCHAR(255),
`antwoord25` VARCHAR(255),
`vraag26` VARCHAR(255),
`antwoord26` VARCHAR(255),
`vraag27` VARCHAR(255),
`antwoord27` VARCHAR(255),
`vraag28` VARCHAR(255),
`antwoord28` VARCHAR(255),
`vraag29` VARCHAR(255),
`antwoord29` VARCHAR(255),
`vraag30` VARCHAR(255),
`antwoord30` VARCHAR(255),
`vraag31` VARCHAR(255),
`antwoord31` VARCHAR(255),
`vraag32` VARCHAR(255),
`antwoord32` VARCHAR(255),
`vraag33` VARCHAR(255),
`antwoord33` VARCHAR(255),
`vraag34` VARCHAR(255),
`antwoord34` VARCHAR(255),
`vraag35` VARCHAR(255),
`antwoord35` VARCHAR(255),
`vraag36` VARCHAR(255),
`antwoord36` VARCHAR(255),
`vraag37` VARCHAR(255),
`antwoord37` VARCHAR(255),
`vraag38` VARCHAR(255),
`antwoord38` VARCHAR(255),
`vraag39` VARCHAR(255),
`antwoord39` VARCHAR(255),
`vraag40` VARCHAR(255),
`antwoord40` VARCHAR(255),
`vraag41` VARCHAR(255),
`antwoord41` VARCHAR(255),
`vraag42` VARCHAR(255),
`antwoord42` VARCHAR(255),
`vraag43` VARCHAR(255),
`antwoord43` VARCHAR(255),
`vraag44` VARCHAR(255),
`antwoord44` VARCHAR(255),
`vraag45` VARCHAR(255),
`antwoord45` VARCHAR(255),
`vraag46` VARCHAR(255),
`antwoord46` VARCHAR(255),
`vraag47` VARCHAR(255),
`antwoord47` VARCHAR(255),
`vraag48` VARCHAR(255),
`antwoord48` VARCHAR(255),
`vraag49` VARCHAR(255),
`antwoord49` VARCHAR(255),
`vraag50` VARCHAR(255),
`antwoord50` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
ALTER TABLE `vragenlijst` CHANGE `date` `date` DATETIME NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE `vragenlijst` CHANGE `mid` `mid` INT(9) NULL DEFAULT '000';
`id` INT NOT NULL AUTO_INCREMENT,
`mid` INT(9),
`date` DATETIME,
`vraag1` VARCHAR(255),
`antwoord1` VARCHAR(255),
`vraag2` VARCHAR(255),
`antwoord2` VARCHAR(255),
`vraag3` VARCHAR(255),
`antwoord3` VARCHAR(255),
`vraag4` VARCHAR(255),
`antwoord4` VARCHAR(255),
`vraag5` VARCHAR(255),
`antwoord5` VARCHAR(255),
`vraag6` VARCHAR(255),
`antwoord6` VARCHAR(255),
`vraag7` VARCHAR(255),
`antwoord7` VARCHAR(255),
`vraag8` VARCHAR(255),
`antwoord8` VARCHAR(255),
`vraag9` VARCHAR(255),
`antwoord9` VARCHAR(255),
`vraag10` VARCHAR(255),
`antwoord10` VARCHAR(255),
`vraag11` VARCHAR(255),
`antwoord11` VARCHAR(255),
`vraag12` VARCHAR(255),
`antwoord12` VARCHAR(255),
`vraag13` VARCHAR(255),
`antwoord13` VARCHAR(255),
`vraag14` VARCHAR(255),
`antwoord14` VARCHAR(255),
`vraag15` VARCHAR(255),
`antwoord15` VARCHAR(255),
`vraag16` VARCHAR(255),
`antwoord16` VARCHAR(255),
`vraag17` VARCHAR(255),
`antwoord17` VARCHAR(255),
`vraag18` VARCHAR(255),
`antwoord18` VARCHAR(255),
`vraag19` VARCHAR(255),
`antwoord19` VARCHAR(255),
`vraag20` VARCHAR(255),
`antwoord20` VARCHAR(255),
`vraag21` VARCHAR(255),
`antwoord21` VARCHAR(255),
`vraag22` VARCHAR(255),
`antwoord22` VARCHAR(255),
`vraag23` VARCHAR(255),
`antwoord23` VARCHAR(255),
`vraag24` VARCHAR(255),
`antwoord24` VARCHAR(255),
`vraag25` VARCHAR(255),
`antwoord25` VARCHAR(255),
`vraag26` VARCHAR(255),
`antwoord26` VARCHAR(255),
`vraag27` VARCHAR(255),
`antwoord27` VARCHAR(255),
`vraag28` VARCHAR(255),
`antwoord28` VARCHAR(255),
`vraag29` VARCHAR(255),
`antwoord29` VARCHAR(255),
`vraag30` VARCHAR(255),
`antwoord30` VARCHAR(255),
`vraag31` VARCHAR(255),
`antwoord31` VARCHAR(255),
`vraag32` VARCHAR(255),
`antwoord32` VARCHAR(255),
`vraag33` VARCHAR(255),
`antwoord33` VARCHAR(255),
`vraag34` VARCHAR(255),
`antwoord34` VARCHAR(255),
`vraag35` VARCHAR(255),
`antwoord35` VARCHAR(255),
`vraag36` VARCHAR(255),
`antwoord36` VARCHAR(255),
`vraag37` VARCHAR(255),
`antwoord37` VARCHAR(255),
`vraag38` VARCHAR(255),
`antwoord38` VARCHAR(255),
`vraag39` VARCHAR(255),
`antwoord39` VARCHAR(255),
`vraag40` VARCHAR(255),
`antwoord40` VARCHAR(255),
`vraag41` VARCHAR(255),
`antwoord41` VARCHAR(255),
`vraag42` VARCHAR(255),
`antwoord42` VARCHAR(255),
`vraag43` VARCHAR(255),
`antwoord43` VARCHAR(255),
`vraag44` VARCHAR(255),
`antwoord44` VARCHAR(255),
`vraag45` VARCHAR(255),
`antwoord45` VARCHAR(255),
`vraag46` VARCHAR(255),
`antwoord46` VARCHAR(255),
`vraag47` VARCHAR(255),
`antwoord47` VARCHAR(255),
`vraag48` VARCHAR(255),
`antwoord48` VARCHAR(255),
`vraag49` VARCHAR(255),
`antwoord49` VARCHAR(255),
`vraag50` VARCHAR(255),
`antwoord50` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
ALTER TABLE `vragenlijst` CHANGE `date` `date` DATETIME NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE `vragenlijst` CHANGE `mid` `mid` INT(9) NULL DEFAULT '000';
kop db:
Quote:
CREATE TABLE `kop` (
`id` INT(9) NOT NULL AUTO_INCREMENT,
`vraag` INT(9),
`vragenlijst` INT(9),
`title` TEXT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
`id` INT(9) NOT NULL AUTO_INCREMENT,
`vraag` INT(9),
`vragenlijst` INT(9),
`title` TEXT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Ik kom niet uit t volgende;
Ik wil een loop maken die alle vragen weergeeft maar als er een kop overeenkomt met het vraag# uit vragenlijst moet deze kop weergegeven worden. enige wat er nu gebeurt is dat eerste 8 vragen niet weergeven worden en erna wel.
de data in vragenlijst die ik nu gebruik als voorbeeld staan 34 vragen in een record.
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
$mysqli = new mysqli("localhost","root","","onderzoek");
if ($mysqli -> connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
exit();
}
$id= $_GET['id'];
if(isset($id)){
$query = "SELECT * FROM kop WHERE vragenlijst={$id}";
if ($result = $mysqli->query($query)) {
/* fetch associative array */
$koppen = array();
while ($row = $result->fetch_assoc()) {
$kop = array(
"id" => $row['vraag'],
"tekst" => $row['title']
);
array_push($koppen, $kop);
}
/* free result set */
$result->free();
}
$query2 = "SELECT * FROM vragenlijst WHERE id={$id} LIMIT 1";
if ($result = $mysqli->query($query2)) {
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
for($i=1;$i<=50;$i++){
if(!empty($row['vraag'.$i])){
if(!empty($koppen[$i]['id'])){
if($koppen[$i]['id'] == $i){
echo "[".$koppen[$i]['tekst']."] (#".$i.") ".$row['vraag'.$i]." <br/>";
}
} else {
echo "(#".$i.") ".$row['vraag'.$i]." <br/>";
}
}
}
}
/* free result set */
$result->free();
}
$mysqli -> close();
}
?>
$mysqli = new mysqli("localhost","root","","onderzoek");
if ($mysqli -> connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
exit();
}
$id= $_GET['id'];
if(isset($id)){
$query = "SELECT * FROM kop WHERE vragenlijst={$id}";
if ($result = $mysqli->query($query)) {
/* fetch associative array */
$koppen = array();
while ($row = $result->fetch_assoc()) {
$kop = array(
"id" => $row['vraag'],
"tekst" => $row['title']
);
array_push($koppen, $kop);
}
/* free result set */
$result->free();
}
$query2 = "SELECT * FROM vragenlijst WHERE id={$id} LIMIT 1";
if ($result = $mysqli->query($query2)) {
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
for($i=1;$i<=50;$i++){
if(!empty($row['vraag'.$i])){
if(!empty($koppen[$i]['id'])){
if($koppen[$i]['id'] == $i){
echo "[".$koppen[$i]['tekst']."] (#".$i.") ".$row['vraag'.$i]." <br/>";
}
} else {
echo "(#".$i.") ".$row['vraag'.$i]." <br/>";
}
}
}
}
/* free result set */
$result->free();
}
$mysqli -> close();
}
?>
Mocht je meer informatie willen hebben stel ze gerust.
mvg,
Pascal
Ik zou beginnen met de database aan te passen.
Zoek eens op database normaliseren.
Zodra je kolommen moet gaan nummeren, ben je in 99 van de 100 keer een foute weg ingeslagen.
Het hangt er een beetje vanaf hoe je het in de praktijk gaat gebruiken.
Maar ik zou nu één tabel maken 'vragenlijst' en één tabel 'vragen_antwoorden' (of zoiets).
In de tabel 'vragen_antwoorden' verwijs je naar 'vragenlijst', naar het ID daarvan. Daarnaast heb je een kolom 'vraag' en een kolom 'antwoord'.
Voor elke vraag/antwoord komt er een regel in die tabel.
Wellicht kun je zelfs de vragen en antwoorden nog apart van elkaar opslaan als de vragen elke keer hetzelfde zijn, maar alleen de antwoorden steeds anders zijn.
Ramon van Dongen op 25/01/2021 13:39:07:
Hallo Pascal,
Ik zou beginnen met de database aan te passen.
Zoek eens op database normaliseren.
Zodra je kolommen moet gaan nummeren, ben je in 99 van de 100 keer een foute weg ingeslagen.
Het hangt er een beetje vanaf hoe je het in de praktijk gaat gebruiken.
Maar ik zou nu één tabel maken 'vragenlijst' en één tabel 'vragen_antwoorden' (of zoiets).
In de tabel 'vragen_antwoorden' verwijs je naar 'vragenlijst', naar het ID daarvan. Daarnaast heb je een kolom 'vraag' en een kolom 'antwoord'.
Voor elke vraag/antwoord komt er een regel in die tabel.
Wellicht kun je zelfs de vragen en antwoorden nog apart van elkaar opslaan als de vragen elke keer hetzelfde zijn, maar alleen de antwoorden steeds anders zijn.
Ik zou beginnen met de database aan te passen.
Zoek eens op database normaliseren.
Zodra je kolommen moet gaan nummeren, ben je in 99 van de 100 keer een foute weg ingeslagen.
Het hangt er een beetje vanaf hoe je het in de praktijk gaat gebruiken.
Maar ik zou nu één tabel maken 'vragenlijst' en één tabel 'vragen_antwoorden' (of zoiets).
In de tabel 'vragen_antwoorden' verwijs je naar 'vragenlijst', naar het ID daarvan. Daarnaast heb je een kolom 'vraag' en een kolom 'antwoord'.
Voor elke vraag/antwoord komt er een regel in die tabel.
Wellicht kun je zelfs de vragen en antwoorden nog apart van elkaar opslaan als de vragen elke keer hetzelfde zijn, maar alleen de antwoorden steeds anders zijn.
Bedankt voor 't snelle antwoord! Oke dan begin ik maar met database opnieuw te ontwerpen, mocht ik erna nog niet uitkomen plaats ik hier weer een bericht.
Maakt het jezelf voor de toekomst veel gemakkelijker.
Plaats je database ontwerp gerust hier, we kijken graag mee.
vragenlijst (koppeling persoon aan vragenlijst)
vragenlijst_id
vragenlijst_mid
vragenlijst_date
vragenlijst_data (voor ingevulde data)
vragenlijst_data_id
vragenlijst_data_mid
vragenlijst_data_date
vragenlijst_data_antwoorden (Wat is handige manier om een wisselbare aantal antwoorden op te slaan, maar ook overzicht niet kwijt te raken?)
als voorbeeld dit is hoe ik dacht dat 'vragenlijst_data_antwoorden' eruit ziet :
1:dit is mijn eerste antwoord.=1, 2:2=2, 3:dit mijn derde antwoord.=1
wat er na '=' komt is de soort vraag: 1 = open antwoord, 2 = multiple choice, 3 = multiple choice, 4 = multiple choice, 2 3 en 4 zijn allemaal anders.
vragen (de vraag, en een soort antwoord dat verwacht kan worden gekoppeld een vragenlijst id)
vragen_id
vragen_vid
vragen_vraag
vragen_soort (soort antwoord vier opties mogelijk)
koppen (de kop, gekoppeld een vragenlijst:id als kop:id overeenkomt met vragen:id dan kop:titel weergeven)
koppen_id
koppen_vid
koppen_titel
groepen (de groepen, gekoppeld aan vragenlijst:id, groep kan voor meerdere vragen zijn of een enkele vraag)
groepen_id
groepen_id
groepen_vragen
Ontbreekt er wat? en graag advies voor het opslaan van de data uit de vragenlijst ik heb namelijk aantal jaren niks gedaan met programmeren of ontwerpen van databases.
Gewijzigd op 25/01/2021 14:56:10 door P Wever
Je hebt dus uiteindelijk een vragenlijst met daarin vragen. Tussen de vragen zet je af en toe een kop (die moet ik dus zien als tekstuele titel?).
De vragen zijn elke keer hetzelfde bij een zelfde vragenlijst?
Klopt het tot zover?
Daarnaast je heb je het nog over;
Quote:
Wat bedoel je daar precies mee? Dit? vragen_soort (soort antwoord vier opties mogelijk)
Quote:
1 = open antwoord, 2 = multiple choice, 3 = multiple choice, 4 = multiple choice,
Want dan moet je per (mulitple choise) vraag dus inderdaad alle mogelijke antwoorden opslaan.
Eigenlijk hoef je de vraag soort dan niet op te slaan; als er geen (meerdere) antwoord mogelijkheden zijn, is het dus een open vraag. Toch?
Toevoeging op 25/01/2021 15:42:01:
Zoiets krijg je dan denk ik;
Ramon van Dongen op 25/01/2021 15:33:27:
De vragen zijn elke keer hetzelfde bij een zelfde vragenlijst?
Ik heb twee vragenlijsten (Eerste werkdag evaluatie en dan elke 3 maanden);
vragenlijst 1; word enkel de eerste keer gebruikt, alle andere keren dat vragenlijst ingevuld moet worden, word er gebruikt gemaakt van vragenlijst 2.
vragenlijst 1 bevat 34 vragen en vragenlijst 2 bevat 45 vragen.
Ramon van Dongen op 25/01/2021 15:33:27:
Je hebt dus uiteindelijk een vragenlijst met daarin vragen. Tussen de vragen zet je af en toe een kop (die moet ik dus zien als tekstuele titel?).
Ja dit klopt helemaal, maar daar boven liggend is de groep omdat sommige vragen samen gegroepeerd word maar soms bestaat een 'groep' maar uit een vraag.
Ramon van Dongen op 25/01/2021 15:33:27:
Daarnaast je heb je het nog over;
Want dan moet je per (mulitple choise) vraag dus inderdaad alle mogelijke antwoorden opslaan.
Eigenlijk hoef je de vraag soort dan niet op te slaan; als er geen (meerdere) antwoord mogelijkheden zijn, is het dus een open vraag. Toch?
Quote:
Wat bedoel je daar precies mee? Dit? vragen_soort (soort antwoord vier opties mogelijk)
Quote:
1 = open antwoord, 2 = multiple choice, 3 = multiple choice, 4 = multiple choice,
Want dan moet je per (mulitple choise) vraag dus inderdaad alle mogelijke antwoorden opslaan.
Eigenlijk hoef je de vraag soort dan niet op te slaan; als er geen (meerdere) antwoord mogelijkheden zijn, is het dus een open vraag. Toch?
vragen_soort is inderdaad soort antwoord dat er gegeven kan worden, dit is zeer belangrijk voor punten telling anders is gehele vragenlijst overbodig.
soort antwoorden
1;
Sterk oneens
oneens
neutraal
eens
sterk mee eens
2;
Zeer ontvreden
Ontevreden
Neutraal
Tevreden
Zeer tevreden
3;
open antwoord
4;
Nee, geen verandering
Ja, slechter geworden
Ja, beter geworden
Wat ik er nog niet in heb verwerkt, is als je een soort antwoord weet; weet je nog niet welke uit de lijst van soort antwoord gekozen is. Stel voor soort antwoord is 2 maar dan weet je nog niet of Zeer ontevreden, Ontevreden, Neutraal, Tevreden, Zeer tevreden.
Gewijzigd op 25/01/2021 16:47:06 door P Wever
Dus als ik je laatste post eens doorlees dan krijg je iets als
tabel vragenlijsten
lijst_id
naam
tabel vraag_groepen (een groep vragen)
vraag_groep_id
groepsnaam
volgorde (hiermee creeer je de mogelijkheid om de volgorde waarop de groepen getoond worden aan te passen)
tabel vragen
vraag_id
groep_id (geeft aan in welke groep deze vraag thuis hoort)
lijst_id (geeft aan in welke lijst deze vraag thuis hoort)
vraag (de vraag, tekst dus)
type (multiple choice of open of whatever)
tabel antwoorden (voor alle (mogelijke) antwoorden die bij een multiple choice vraag horen)
antwoord_id
vraag_id (bij welke vraag hoort dit mogelijke multiple choice antwoord)
antwoord (de tekst)
juist (true als dit het juiste antwoord is)
Voor de duidelijkheid: in de tabel vragen komen dus ALLE vragen. Het maakt niet uit in welke lijst of welke groep de vraag hoort. Het maakt ook niet uit wat voor type vraag het is.
Bij elk database ontwerp moet je keuzes maken. In mijn voorbeeld ben ik er van uit gegaan dat iedere vraag slechts in één groep hoort en slechts in één vragenlijst komt te staan maar ik had er ook voor kunnen kiezen dat een vraag in meerdere groepen of lijsten mag voorkomen.
Daarnaast heb ik de kolom lijst_id in de tabel vragen geplaatst maar ik had deze ook in de tabel groepen kunnen plaatsen. in dat geval hoort een vraag enkel bij een bepaalde groep en een groep bij een bepaalde lijst. Zo zie je dat een juist database-ontwerp tijd en ervaring vergt ...
Gewijzigd op 26/01/2021 00:01:09 door Frank Nietbelangrijk
Frank Nietbelangrijk op 25/01/2021 23:35:50:
Je moet bij het ontwerp denken aan entiteiten of dingen. Een vraag is een vraag. of die nou bij vragenlijst 1 of 2 hoort en of die nou multiple choice of open is maakt niet uit want dat zijn kenmerken.
Dus als ik je laatste post eens doorlees dan krijg je iets als
tabel vragenlijsten
lijst_id
naam
tabel vraag_groepen (een groep vragen)
vraag_groep_id
groepsnaam
volgorde (hiermee creeer je de mogelijkheid om de volgorde waarop de groepen getoond worden aan te passen)
tabel vragen
vraag_id
groep_id (geeft aan in welke groep deze vraag thuis hoort)
lijst_id (geeft aan in welke lijst deze vraag thuis hoort)
vraag (de vraag, tekst dus)
type (multiple choice of open of whatever)
tabel antwoorden (voor alle (mogelijke) antwoorden die bij een multiple choice vraag horen)
antwoord_id
vraag_id (bij welke vraag hoort dit mogelijke multiple choice antwoord)
antwoord (de tekst)
juist (true als dit het juiste antwoord is)
Voor de duidelijkheid: in de tabel vragen komen dus ALLE vragen. Het maakt niet uit in welke lijst of welke groep de vraag hoort. Het maakt ook niet uit wat voor type vraag het is.
Bij elk database ontwerp moet je keuzes maken. In mijn voorbeeld ben ik er van uit gegaan dat iedere vraag slechts in één groep hoort en slechts in één vragenlijst komt te staan maar ik had er ook voor kunnen kiezen dat een vraag in meerdere groepen of lijsten mag voorkomen.
Daarnaast heb ik de kolom lijst_id in de tabel vragen geplaatst maar ik had deze ook in de tabel groepen kunnen plaatsen. in dat geval hoort een vraag enkel bij een bepaalde groep en een groep bij een bepaalde lijst. Zo zie je dat een juist database-ontwerp tijd en ervaring vergt ...
Dus als ik je laatste post eens doorlees dan krijg je iets als
tabel vragenlijsten
lijst_id
naam
tabel vraag_groepen (een groep vragen)
vraag_groep_id
groepsnaam
volgorde (hiermee creeer je de mogelijkheid om de volgorde waarop de groepen getoond worden aan te passen)
tabel vragen
vraag_id
groep_id (geeft aan in welke groep deze vraag thuis hoort)
lijst_id (geeft aan in welke lijst deze vraag thuis hoort)
vraag (de vraag, tekst dus)
type (multiple choice of open of whatever)
tabel antwoorden (voor alle (mogelijke) antwoorden die bij een multiple choice vraag horen)
antwoord_id
vraag_id (bij welke vraag hoort dit mogelijke multiple choice antwoord)
antwoord (de tekst)
juist (true als dit het juiste antwoord is)
Voor de duidelijkheid: in de tabel vragen komen dus ALLE vragen. Het maakt niet uit in welke lijst of welke groep de vraag hoort. Het maakt ook niet uit wat voor type vraag het is.
Bij elk database ontwerp moet je keuzes maken. In mijn voorbeeld ben ik er van uit gegaan dat iedere vraag slechts in één groep hoort en slechts in één vragenlijst komt te staan maar ik had er ook voor kunnen kiezen dat een vraag in meerdere groepen of lijsten mag voorkomen.
Daarnaast heb ik de kolom lijst_id in de tabel vragen geplaatst maar ik had deze ook in de tabel groepen kunnen plaatsen. in dat geval hoort een vraag enkel bij een bepaalde groep en een groep bij een bepaalde lijst. Zo zie je dat een juist database-ontwerp tijd en ervaring vergt ...
Heel erg bedankt voor je antwoord, hier kan ik wat mee!