Data Goed Uitlezen
Ik heb een vraagje over het uitlezen van data, ging altijd goed op mijn eigen manier, maar nu ik vandaag ben begonnen met inner join loop ik op een probleem, naja het werk wel, maar bijvoorbeeld orderen werkt niet.
Ik kan niet goed vinden op het net hoe ik nu alle data goed kan laten zien.
Ik heb als voorbeeld world of warcraft races en classes genomen, de getallen met de desbetreffende race/class in het tables daarvan werken goed, dus de innerjoins.
Alvast bedankt.
De code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo "<table border='0'><tr><td width='200'><b>Name</b></td><td width='200'><b>Race</b></td><td width='200'><b>Class</b></td><td><b>Level</b></td></tr>";
for ($i = 1; $i <= maxid('PlayerId','playertable'); $i++) {
$result = mysql_query("
SELECT playertable.PlayerName, racetable.RaceName, classtable.ClassName, classtable.ClassColor, classtable.ClassIcon, playertable.PlayerLevel, racetable.RaceIcon
FROM playertable
INNER JOIN racetable
ON playertable.RaceId=racetable.RaceId
INNER JOIN classtable
ON playertable.ClassId=classtable.ClassId
WHERE PlayerId='$i'
ORDER BY playertable.PlayerName
")
or die(mysql_error());
$row = mysql_fetch_array($result);
echo "<tr><td>" . $row['PlayerName'] . "</td><td><img src='" . $row['RaceIcon'] . "'>" . $row['RaceName'] . "</td><td><img src='" . $row['ClassIcon'] . "'><font color='" . $row['ClassColor'] . "'>" . $row['ClassName'] . "</font></td><td>" . $row['PlayerLevel'] . "</td></tr>";
}
echo "</table>";
for ($i = 1; $i <= maxid('PlayerId','playertable'); $i++) {
$result = mysql_query("
SELECT playertable.PlayerName, racetable.RaceName, classtable.ClassName, classtable.ClassColor, classtable.ClassIcon, playertable.PlayerLevel, racetable.RaceIcon
FROM playertable
INNER JOIN racetable
ON playertable.RaceId=racetable.RaceId
INNER JOIN classtable
ON playertable.ClassId=classtable.ClassId
WHERE PlayerId='$i'
ORDER BY playertable.PlayerName
")
or die(mysql_error());
$row = mysql_fetch_array($result);
echo "<tr><td>" . $row['PlayerName'] . "</td><td><img src='" . $row['RaceIcon'] . "'>" . $row['RaceName'] . "</td><td><img src='" . $row['ClassIcon'] . "'><font color='" . $row['ClassColor'] . "'>" . $row['ClassName'] . "</font></td><td>" . $row['PlayerLevel'] . "</td></tr>";
}
echo "</table>";
De DB:
De Output:
Gewijzigd op 15/11/2010 20:45:08 door Hendrik de Jager
Schrijf je queries netjes uit, plak niet zomaar alles achter elkaar
Les 2:
_fetch_array is niet echt handig zonder de method - 2de parameter - mee te geven, en aangezien je toch in feite altijd zal moeten gaan voor ASOC kan je net zo goed _fetch_assoc gebruiken
Les 3:
Je weet zeker dat je alle tabellen een 1 op 1 relatie hebt, lijkt mij van niet
Verdiep je eens in de verschillende manieren van JOINEN
http://www.w3schools.com/Sql/sql_join.asp
Les 4:
Het is efficienter om strings te qouten met enkele quotes
Les 5:
or die() staat gelijk aan een 1 malige afvoer naar het kerkhof dan wel de asla van het crematorium
pas fatsoenlijke foutafhandeling opdat de code die volgt en afhankelijk er van is gewoon doorlopen kan worden
Les 6:
php variabelen buiten quotes
Les 7:
Ken Sql statements toe aan een variabele welke je dan aan bij _query gebruikt. Op deze manie rkan je dan indien het fout gaat de error geven en het sql statement.
Dat geeft vaak meer inzicht van wat er aan de hand is dan alleen maar de error omschrijving
Gewijzigd op 15/11/2010 21:06:20 door Noppes Homeland
Ik had ooit iets opgepakt met Key ofzo? Alvast Bedankt.
in die code hierboven ben je de $ vergeten voor maxid... en waarschijnlijk doel je op foreach?
Bedoel je misschien while?
Teun Hesseling op 16/11/2010 16:25:49:
in die code hierboven ben je de $ vergeten voor maxid... en waarschijnlijk doel je op foreach?
Ja wss wel, maar wat vraag ik hem dan, foreach wat?
en wat doe die functie maxid dan?
Sorry dat ik zo noob ben (waarschijnlijk) maar ik nog maar een beginnen die toch wil beginnen aan het hogere werk.
Alvast bedankt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$sql = "SELECT ORDER BY"
if (($result = mysql_query($sql)) === false) {
// foutafhandeling
}
else {
// je kan hier iet doen met _num_rows
while ($row = mysql_fetch_assoc($result)) {
print_r($row);
}
}
?>
$sql = "SELECT ORDER BY"
if (($result = mysql_query($sql)) === false) {
// foutafhandeling
}
else {
// je kan hier iet doen met _num_rows
while ($row = mysql_fetch_assoc($result)) {
print_r($row);
}
}
?>
de query is dermate dat je die gegevens ophaalt die je wilt ophalen en ook alsdanig in een volgorde waarop je een bepaalde layout kan baseren.
}
Gewijzigd op 16/11/2010 20:10:21 door Noppes Homeland
Zo Ja:
Wat zou de code zijn als ik om mijn html pagina alle Druids wil zien? (Race 5)
En wat zou de code zijn ik op mijn html pagina de spelers op alfabetishe volgorde wil laten zien?
Mega Bedankt Alvast!
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
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
<?php
define('DEBUG_MODE', true); //True is foutmelding aan, false is foutmelding uit
#Contact maken met database
$mysql = mysql_connect('localhost','gebruikersnaam','wachtwoord');
if(!$mysql) { //Als $mysql false is, dus geen contact
echo "Er kan geen verbinding met de database worden gemaakt.";
if(DEBUG_MODE) { //Als je de functie bovenaan op true hebt gezet
echo "<br />".mysql_error($mysql);
}
}
else { //Als $mysql true is, dus contact
$db = mysql_select_db('databasenaam',$mysql);
if(!$db) { //Als $db false is, dus geen db
echo "Er kan geen database worden gevonden";
if(DEBUG_MODE) { //Als DEBUG true is
echo "<br />".mysql_error($db);
}
}
else { //Als $db true is, wel db
$query = "SELECT ClassId where RaceID=5";
$result = mysql_query($query, $mysql);
while($row = mysql_fetch_assoc($result)) {
echo $row['ClassId'];
}
}
}
?>
define('DEBUG_MODE', true); //True is foutmelding aan, false is foutmelding uit
#Contact maken met database
$mysql = mysql_connect('localhost','gebruikersnaam','wachtwoord');
if(!$mysql) { //Als $mysql false is, dus geen contact
echo "Er kan geen verbinding met de database worden gemaakt.";
if(DEBUG_MODE) { //Als je de functie bovenaan op true hebt gezet
echo "<br />".mysql_error($mysql);
}
}
else { //Als $mysql true is, dus contact
$db = mysql_select_db('databasenaam',$mysql);
if(!$db) { //Als $db false is, dus geen db
echo "Er kan geen database worden gevonden";
if(DEBUG_MODE) { //Als DEBUG true is
echo "<br />".mysql_error($db);
}
}
else { //Als $db true is, wel db
$query = "SELECT ClassId where RaceID=5";
$result = mysql_query($query, $mysql);
while($row = mysql_fetch_assoc($result)) {
echo $row['ClassId'];
}
}
}
?>
Wouter J op 16/11/2010 20:30:28:
Bij alles laten zien als RaceID=5 wordt de code ong. zo:
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
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
<?php
define('DEBUG_MODE', true); //True is foutmelding aan, false is foutmelding uit
#Contact maken met database
$mysql = mysql_connect('localhost','gebruikersnaam','wachtwoord');
if(!$mysql) { //Als $mysql false is, dus geen contact
echo "Er kan geen verbinding met de database worden gemaakt.";
if(DEBUG_MODE) { //Als je de functie bovenaan op true hebt gezet
echo "<br />".mysql_error($mysql);
}
}
else { //Als $mysql true is, dus contact
$db = mysql_select_db('databasenaam',$mysql);
if(!$db) { //Als $db false is, dus geen db
echo "Er kan geen database worden gevonden";
if(DEBUG_MODE) { //Als DEBUG true is
echo "<br />".mysql_error($db);
}
}
else { //Als $db true is, wel db
$query = "SELECT ClassId where RaceID=5";
$result = mysql_query($query, $mysql);
while($row = mysql_fetch_assoc($result)) {
echo $row['ClassId'];
}
}
}
?>
define('DEBUG_MODE', true); //True is foutmelding aan, false is foutmelding uit
#Contact maken met database
$mysql = mysql_connect('localhost','gebruikersnaam','wachtwoord');
if(!$mysql) { //Als $mysql false is, dus geen contact
echo "Er kan geen verbinding met de database worden gemaakt.";
if(DEBUG_MODE) { //Als je de functie bovenaan op true hebt gezet
echo "<br />".mysql_error($mysql);
}
}
else { //Als $mysql true is, dus contact
$db = mysql_select_db('databasenaam',$mysql);
if(!$db) { //Als $db false is, dus geen db
echo "Er kan geen database worden gevonden";
if(DEBUG_MODE) { //Als DEBUG true is
echo "<br />".mysql_error($db);
}
}
else { //Als $db true is, wel db
$query = "SELECT ClassId where RaceID=5";
$result = mysql_query($query, $mysql);
while($row = mysql_fetch_assoc($result)) {
echo $row['ClassId'];
}
}
}
?>
Echt ongelofelijk bedankt, eindelijk is dit wat ik zoek, ozo simpel (i guess), maar het werkt, THX!