Meer data op de tabel
Ik heb een tabel aangemaakt. (zie image)
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
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
<html>
<head>
<title>Dit is wat HTML</title>
</head>
<body>
<table class="tabel" cellpadding="5" cellspacing="0">
<tr bgcolor="#e5e5e5">
<td><span>Model</span></td>
<td><span>Aantal</span></td>
<td colspan="2"><span>Location/code</span></td>
<td colspan="2"><span>Kleur/code</span></td>
</td>
</tr>
<tr>
<?php
require "../con/db.php";
$query = "SELECT typmo,
COUNT(DISTINCT kleur) AS typmo1,
COUNT(DISTINCT location) AS typmo2,
location,
COUNT(typmo) AS typmo3,
kleur
FROM instock GROUP BY typmo";
$result = mysql_query($query) or die(mysql_error());
// Print out result
while($row = mysql_fetch_array($result)){
echo "<tr><td><span>".$row['typmo']."</span></td>
<td><span>".$row['typmo3']."</span></td>
<td><span>".$row['typmo2']."</span></td>
<td><span>".$row['location']."</span></td>
<td><span>".$row['typmo1']."</span></td>";
<td><span>".$row['kleur']."</span></td>";
}
}
?>
</tr>
</table>
</body>
</html>
<head>
<title>Dit is wat HTML</title>
</head>
<body>
<table class="tabel" cellpadding="5" cellspacing="0">
<tr bgcolor="#e5e5e5">
<td><span>Model</span></td>
<td><span>Aantal</span></td>
<td colspan="2"><span>Location/code</span></td>
<td colspan="2"><span>Kleur/code</span></td>
</td>
</tr>
<tr>
<?php
require "../con/db.php";
$query = "SELECT typmo,
COUNT(DISTINCT kleur) AS typmo1,
COUNT(DISTINCT location) AS typmo2,
location,
COUNT(typmo) AS typmo3,
kleur
FROM instock GROUP BY typmo";
$result = mysql_query($query) or die(mysql_error());
// Print out result
while($row = mysql_fetch_array($result)){
echo "<tr><td><span>".$row['typmo']."</span></td>
<td><span>".$row['typmo3']."</span></td>
<td><span>".$row['typmo2']."</span></td>
<td><span>".$row['location']."</span></td>
<td><span>".$row['typmo1']."</span></td>";
<td><span>".$row['kleur']."</span></td>";
}
}
?>
</tr>
</table>
</body>
</html>
Vraagje?
Hoe kan ik bv bij meer dan een kleur en/of locatie de data op de tabel laten zien? zie tabel hieronder
Hopelijk kan iemand mij helpen.
Alvast bedankt.
Kortom, zoek een echte database of ga minimaal MySQL fatsoenlijk configureren, dan maak je nog een kans.
Verder lijkt met het datamodel ook niet goed, je hebt 2 kolommen met in iedere kolom meerdere verschillende waardes. Dat is fout, in 1 kolom staat 1 soort waarde. Je kunt dus nooit 2 en 001 in 1 kolom hebben staan, dan heb je blijkbaar niet genormaliseerd. Ga dit eerst aanpassen, dat lost waarschijnlijk je huidige probleem ook al op.
Wanneer je jouw huidige query loslaat op een echte database of op een goed geconfigureerde database, zul je een fraaie foutmelding krijgen die iets roept over een foute toepassing van aggregate functies en GROUP BY.
1 met je modellen en een unieke waarde per rij. Dit zou je modelnaam kunnen zijn
en dan nog 2 andere met locaties en kleuren
dus:
Tabel 1:
Charles Dale 50
Tabel 2:
Charles Dale 001
Charles Dale 002
Tabel 3:
Charles Dale Black
Charles Dale Silver
Charles Dale Wood
en dan om alles te krijgen met 1 query gebruik je een JOIN. WHERE charles Dale natuurlijk. je kan er ook voor kiezen ipv de volledige naam een id te gebruiken.
Quote:
Kiezen??? Er valt weinig te kiezen, een foreign key laat je verwijzen naar een primary key en dat is normaal gesproken een id. Dat maakt de boel ook al snel een factor 1000 sneller...je kan er ook voor kiezen ipv de volledige naam een id te gebruiken
De keuze is tussen dingen die meer geoptimaliseerd zijn of dingen die makkelijker te begrijpen en te lezen zijn.
Ik wist het nog niet, ik ga gelijk ff googlen naar foreign key :)
Flip schreef op 17.12.2008 14:26:
Er zit een héél groot verschil tussen "het werkt" en "het lijkt te werken"... 3x dezelfde data opslaan is 3x een kans lopen op een corrupte database.Het werkt.
Quote:
Nee, het verschil tussen kennis en een gebrek aan kennis. Of is een corrupte database ineens een gewenste functionaliteit?De keuze is tussen dingen die meer geoptimaliseerd zijn of dingen die makkelijker te begrijpen en te lezen zijn.
Quote:
Dan heb je blijkbaar nog nooit met een relationele database gewerkt en/of genormaliseerd, je kunt niet normaliseren zonder foreign keys te definieeren.Ik wist het nog niet, ik ga gelijk ff googlen naar foreign key :)
Mocht je MySQL gebruiken, dan zul je wel de innoDB-engine van MySQL moeten selecteren omdat je anders géén foreign keys kunt aanmaken en dus geen relationele database kunt aanmaken (en onderhouden) in MySQL.
MySQL is dan ook redelijk ***beeeep***.
Het is gewoon eenvoudiger voor de beginner, that's all.
Ik heb zelf in mijn database dingen gekoppeld met een id. Ik heb wel vaker dat ik dingen gebruik zonder dat ik de term er voor weet.
uit dit voorbeeld http://dev.mysql.com/doc/refman/5.0/en/example-foreign-keys.html
haal ik dat je nog steeds een id opslaat in de andere tabel, de reference lijkt me dus meer een geheugen steuntje. Is er dan een snelheids voordeel tussen het beschrijven van een reference tegenover "gewoon" aangeven dat het aan een id uit een andere tabel gekoppeld is?
Flip schreef op 17.12.2008 14:47:
En is Charles nu hetzelfde als charles of Charless? Een tikfout is zo gemaakt, een corrupte database is dus ook zo aangemaakt.Nouja laat het duidelijk zijn dat ik niet met je eens bent dat 3x dezelfde data opslaan per definitie leid tot een corrupte database en daarom blijf ik bij mijn standpunt: het werkt.
Quote:
Het is gewoon eenvoudiger voor de beginner, that's all.
Nee, dat is het niet, leer het gewoon direct goed en je hoeft geen rare toepassingen meer af te leren. Iets nieuws aanleren gaat 100x sneller dan iets afleren.
Quote:
Nee, het is geen geheugensteuntje, het is een constraint. Het bepaalt wat er gaat gebeuren als er geen match (meer) is. Zo kun je bv. een foutmelding laten geven wanneer er geen match is of de waarde op NULL laten zetten.uit dit voorbeeld http://dev.mysql.com/doc/refman/5.0/en/example-foreign-keys.html haal ik dat je nog steeds een id opslaat in de andere tabel, de reference lijkt me dus meer een geheugen steuntje.
Quote:
Jouw "gewoon aangeven" heeft geen enkele betekenis, is een volkomen waardeloos gegeven. Jouw applicatie kan technisch onmogelijk constraints afdwingen, jouw applicatie krijgt namelijk altijd gegevens uit de database die mogelijk al zijn achterhaald. Je kunt dus geen foutmelding geven wanneer er geen match meer is, wellicht is die er nu al wel weer. Je weet het niet, alleen de database kan dit weten. Denk maar aan de situatie dat user A gegevens selecteert en een fractie van een seconde later verwijdert user B deze gegevens. Ondertussen krijgt user A de gegevens op het scherm... Deze bestaan alleen niet meer! Dit valt met een applicatie onmogelijk vast te stellen, dat kan alleen in de database en daarbij heb je foreign keys nodig. (zie de handleiding van een willekeurige RDBMS)Is er dan een snelheids voordeel tussen het beschrijven van een reference tegenover "gewoon" aangeven dat het aan een id uit een andere tabel gekoppeld is?
Met de juiste indexen (en een FK is ook een type index) kan je database zomaar 1000x sneller worden, dat is niets bijzonders.
Tip: Ga je eens verdiepen in relationele databases, je slaat hier en daar wel een plank mis.