1 product met meerdere eigenschappen in 1 row
De pagina: http://wmomusic.org/fl1/flpets3.php
Ik doe iets helemaal fout... Ik krijg namelijk geen resultaten. Ik heb vanalles gelezen en geprobeerd, maar kan nergens een dergelijk voorbeeld vinden. Misschien moet ik iedere skill steeds afzonderlijk op laten halen (loop) uit de DB tabel? Ik heb echter geen idee hoe ik moet beginnen :)
Wat werkt wel: http://wmomusic.org/fl1/flpets2.php zo werkt het wel. Echter dat is niet de bedoeling. De bedoeling is iedere petID 1x displayen in de tabel.
mijn script:
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
65
66
67
68
69
70
71
72
73
74
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
65
66
67
68
69
70
71
72
73
74
<html>
<body text="#000000">
<?php
include("../connect.php");
$query="SELECT pets.PET_ID, pets.Petname, pets.element_id, elements.element_id, elements.elementname,
pets.Levelmin, pets.Levelmax, pets.imageurl, petskill.Pet_ID, petskill.Skill_ID, skills.SKILL_ID, GROUP_CONCAT(DISTINCT skills.skillname ORDER BY skills.skillname DESC SEPARATOR ', '), GROUP_CONCAT(locations.Location SEPARATOR ', '), petlocations.LOC_ID, petlocations.PET_ID, locations.LOC_ID
FROM pets
JOIN elements
ON pets.element_id=elements.element_id
JOIN petlocations
ON pets.PET_ID=petlocations.Pet_ID
JOIN locations
ON petlocations.LOC_ID=locations.LOC_ID
JOIN petskill
ON pets.PET_ID=petskill.Pet_ID
JOIN skills
ON petskill.Skill_ID=skills.SKILL_ID
GROUP BY pets.PET_ID
LIMIT 0,30";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
echo "<b><center>Earthpets</center></b><br><br>";
?>
<center>
<table border="1" cellspacing="2" cellpadding="2" bgcolor="#FFFFFF" width="900">
<tr>
<th>Pet name</th>
<th>Element</th>
<th>Levelmin</th>
<th>Levelmax</th>
<th>Skills</th>
<th>Location</th>
<th>Picture</th>
</tr>
<?php
$i=0;
while ($i < $num) {
$Petname=mysql_result($result,$i,"Petname");
$elementname=mysql_result($result,$i,"elementname");
$Levelmin=mysql_result($result,$i,"Levelmin");
$Levelmax=mysql_result($result,$i,"Levelmax");
$skillname=mysql_result($result,$i,"skillname");
$Location=mysql_result($result,$i,"Location");
$imageurl=mysql_result($result,$i,"imageurl");
?>
<tr>
<td><?php echo $Petname; ?></td>
<td><?php echo $elementname; ?></td>
<td><?php echo $Levelmin; ?></td>
<td><?php echo $Levelmax; ?></td>
<td><?php echo $skillname; ?></td>
<td><?php echo $Location; ?></td>
<td><img src="<?php echo $imageurl; ?>"</td>
</tr>
<?php
$i++;
}
?>
</body>
</html>
<body text="#000000">
<?php
include("../connect.php");
$query="SELECT pets.PET_ID, pets.Petname, pets.element_id, elements.element_id, elements.elementname,
pets.Levelmin, pets.Levelmax, pets.imageurl, petskill.Pet_ID, petskill.Skill_ID, skills.SKILL_ID, GROUP_CONCAT(DISTINCT skills.skillname ORDER BY skills.skillname DESC SEPARATOR ', '), GROUP_CONCAT(locations.Location SEPARATOR ', '), petlocations.LOC_ID, petlocations.PET_ID, locations.LOC_ID
FROM pets
JOIN elements
ON pets.element_id=elements.element_id
JOIN petlocations
ON pets.PET_ID=petlocations.Pet_ID
JOIN locations
ON petlocations.LOC_ID=locations.LOC_ID
JOIN petskill
ON pets.PET_ID=petskill.Pet_ID
JOIN skills
ON petskill.Skill_ID=skills.SKILL_ID
GROUP BY pets.PET_ID
LIMIT 0,30";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
echo "<b><center>Earthpets</center></b><br><br>";
?>
<center>
<table border="1" cellspacing="2" cellpadding="2" bgcolor="#FFFFFF" width="900">
<tr>
<th>Pet name</th>
<th>Element</th>
<th>Levelmin</th>
<th>Levelmax</th>
<th>Skills</th>
<th>Location</th>
<th>Picture</th>
</tr>
<?php
$i=0;
while ($i < $num) {
$Petname=mysql_result($result,$i,"Petname");
$elementname=mysql_result($result,$i,"elementname");
$Levelmin=mysql_result($result,$i,"Levelmin");
$Levelmax=mysql_result($result,$i,"Levelmax");
$skillname=mysql_result($result,$i,"skillname");
$Location=mysql_result($result,$i,"Location");
$imageurl=mysql_result($result,$i,"imageurl");
?>
<tr>
<td><?php echo $Petname; ?></td>
<td><?php echo $elementname; ?></td>
<td><?php echo $Levelmin; ?></td>
<td><?php echo $Levelmax; ?></td>
<td><?php echo $skillname; ?></td>
<td><?php echo $Location; ?></td>
<td><img src="<?php echo $imageurl; ?>"</td>
</tr>
<?php
$i++;
}
?>
</body>
</html>
Wie heeft er een hint? Waar ga ik de mist in?
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 01/11/2015 13:36:15 door - Ariën -
Dan moeten de skills en locaties in aparte tabellen komen.
De gouden regel in databaseontwerp is: sla nooit meer dan één stuk informatie in een cel op en sla nooit data dubbel op.
En dat is zo omdat je anders dit soort problemen krijgt; je maakt nu blijkbaar meerdere rijen voor alle skills en locaties per pet en dat sla je weer plat met een group by, maar je selecteert verder geen aggregaten dus de group-by is een fout en dus klopt je datamodel niet met wat je wilt doen.
1 aparte table met pets.PET_ID=petlocations.Pet_ID
1 aparte table met petlocations (en ID)
1 aparte table met pets.PET_ID=petskill.Pet_ID
1 aparte table met petskills (en ID)
Hoe los ik dit op?
In business lijnen: een leverancier kan bezorgen bij meerdere klanten
een klant kan op 1 dag meerdere bestellingen doen
Kun je dat in 1 cell van een tabel echo-en? of desnoods in meerdere naast elkaar?
de indeling in de table is nu:
Pet_ID Skill_ID
1 5
1 6
1 29
1 30
1 15
1 31
1 32
1 10
1 12
1 13
1 14
2 5
2 6
2 29
2 30
2 31
Dat group by niet de oplossing is zie ik....dus moet het anders, maar ik zie niet hoe... ik breek er mijn hoofd over....al maanden. maar ik zie t niet
Gewijzigd op 01/11/2015 13:04:33 door MIchiel Broersen
MIchiel Broersen op 01/11/2015 13:01:33:
Hoe de indeling nu is: 1 table met Pet_ID en een klein aantal eigenschappen.
1 aparte table met pets.PET_ID=petlocations.Pet_ID
1 aparte table met petlocations (en ID)
1 aparte table met pets.PET_ID=petskill.Pet_ID
1 aparte table met petskills (en ID)
Hoe los ik dit op?
In business lijnen: een leverancier kan bezorgen bij meerdere klanten
een klant kan op 1 dag meerdere bestellingen doen
Kun je dat in 1 cell van een tabel echo-en? of desnoods in meerdere naast elkaar?
de indeling in de table is nu:
Pet_ID Skill_ID
1 5
1 6
1 29
1 30
1 15
1 31
1 32
1 10
1 12
1 13
1 14
2 5
2 6
2 29
2 30
2 31
Dat group by niet de oplossing is zie ik....dus moet het anders, maar ik zie niet hoe... ik breek er mijn hoofd over....al maanden. maar ik zie t niet
1 aparte table met pets.PET_ID=petlocations.Pet_ID
1 aparte table met petlocations (en ID)
1 aparte table met pets.PET_ID=petskill.Pet_ID
1 aparte table met petskills (en ID)
Hoe los ik dit op?
In business lijnen: een leverancier kan bezorgen bij meerdere klanten
een klant kan op 1 dag meerdere bestellingen doen
Kun je dat in 1 cell van een tabel echo-en? of desnoods in meerdere naast elkaar?
de indeling in de table is nu:
Pet_ID Skill_ID
1 5
1 6
1 29
1 30
1 15
1 31
1 32
1 10
1 12
1 13
1 14
2 5
2 6
2 29
2 30
2 31
Dat group by niet de oplossing is zie ik....dus moet het anders, maar ik zie niet hoe... ik breek er mijn hoofd over....al maanden. maar ik zie t niet
het is gelukt: http://wmomusic.org/fl1/test4.php GROUP_CONCAT en de juiste opbouw en select opdracht.