Hoe lees en schrijf ik in een genormaliseerde database.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT
hoofdindex.id
a.a1
b.b1
c.c1
FROM
hoofdindex
JOIN a ON hoofdindex.a_id = a.id
JOIN b ON hoofdindex.b_id = b.id
JOIN c ON hoofdindex.c_id = b_id
WHERE
hoofdindex.id = 1;
hoofdindex.id
a.a1
b.b1
c.c1
FROM
hoofdindex
JOIN a ON hoofdindex.a_id = a.id
JOIN b ON hoofdindex.b_id = b.id
JOIN c ON hoofdindex.c_id = b_id
WHERE
hoofdindex.id = 1;
Zo heb je meer controle over hoe de joins tot stand komen (door op een juiste manier gebruik te maken van INNER JOIN, LEFT JOIN, OUTER JOIN etc), je query wordt veel ovrzichtelijker doordat je de join voorwaarden niet in je WHERE clause nodig hebt en het schijnt ook sneller te zijn.
Mee info, zie de link die naar de tutorial die ik eerder al plaatste.
Gewijzigd op 03/03/2012 21:44:31 door Erwin H
Wat betreft het schrijven weet ik het denk ik al (al kan ik dat morgen pas testen want vandaag geen puf meer voor ;) maar volgens mij wordt het dan zoiets als dit:
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
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
$query1 = "INSERT INTO a VALUES (
'',
'$a1',
'$a2'
)";
mysql_query($query1);
$query="SELECT * FROM a";
$result=mysql_query($query);
$a_id=mysql_numrows($result);
mysql_close();
$query2 = "INSERT INTO b VALUES (
'',
'$b1',
'$b2'
)";
mysql_query($query2);
$query="SELECT * FROM b";
$result=mysql_query($query);
$b_id=mysql_numrows($result);
mysql_close();
$query3 = "INSERT INTO c VALUES (
'',
'$c1',
'$c2'
)";
mysql_query($query3);
$query="SELECT * FROM c";
$result=mysql_query($query);
$c_id=mysql_numrows($result);
mysql_close();
$query4 = "INSERT INTO hoofdindex VALUES (
'',
'$a_id',
'$b_id',
'$c_id'
)";
mysql_query($query3);
'',
'$a1',
'$a2'
)";
mysql_query($query1);
$query="SELECT * FROM a";
$result=mysql_query($query);
$a_id=mysql_numrows($result);
mysql_close();
$query2 = "INSERT INTO b VALUES (
'',
'$b1',
'$b2'
)";
mysql_query($query2);
$query="SELECT * FROM b";
$result=mysql_query($query);
$b_id=mysql_numrows($result);
mysql_close();
$query3 = "INSERT INTO c VALUES (
'',
'$c1',
'$c2'
)";
mysql_query($query3);
$query="SELECT * FROM c";
$result=mysql_query($query);
$c_id=mysql_numrows($result);
mysql_close();
$query4 = "INSERT INTO hoofdindex VALUES (
'',
'$a_id',
'$b_id',
'$c_id'
)";
mysql_query($query3);
benoem altijd alle kolommen in een insert statement. Dit zorgt voor een robustere query en geeft je de mogelijkheid kolommen niet mee te nemen in een insert. Als je geen kolommen benoemt zal je namelijk alle kolommen een waarde moeten geven en in de volgorde zoals ze zijn gedefinieerd in je table create statement. Vergeet je er een, of draai je er twee om dan gaat je query onderuit. Dus ook als je later nog eens een kolom toevoegt en die niet opneemt in je insert query. Als je alle kolommen gewoon benoemt heb je van al dat geen last en kan je kolommen in een willekeurige volgorde opnemen. Dus:
Code (php)
1
2
2
INSERT a (kolom_a1, kolom_a3, kolom_6, kolom_a2)
VALUES( 'iets', 'iets anders', 'nog iets', 3);
VALUES( 'iets', 'iets anders', 'nog iets', 3);
En natuurlijk variabelen buiten quotes, maar dat wist je vast al lang.
Dat wat je zegt met het benoemen van kolommen klinkt best zinnig en zal ik zeker doen. De structuur die ik hanteer heb ik ergens eens gecopy /paste en weet er dus niet de voor of nadelen van, en dus ook niet dat
moet zijn? of bedoelde je dat niet met je laatste regel? Naja.. ik test het morgen wel. Nu eerst maar eens pitten(en bedankt voor je moeite me toch wat bij proberen te brengen) :D
Toevoeging op 04/03/2012 10:09:52:
het gaat me niet lukken, helaas.
opgegeven.