Query syntax voor koppeltabel
Hoe kan je een koppel tabel ofzo maken
ik had hulp van benny gekregen met een badge
systeem waar ik heel erg blij mee ben.
Daarvoor wil ik hem nog even bedanken:
Bedankt :P zo nu weet iedereen het >:P
Naja maar met dat script kon je niet een badge
aan meerdere mensen geven dus nu zegt php_newbie ofzo dat je et anders moet dan maar dan met een koppel tabel -.- HOE DOE JE DIT :p
kan je dan wel meerdere badges aan mensen geven? xD
Alvast bedankt ;D
Gewijzigd op 01/01/1970 01:00:00 door Lill-mik
daarna maak je in de tabel users of gebruikers oid een extra veld aan genaamd badge bijv. en daarin zet je het id van de desbetreffende badge, dus heb je bijv het volgende.
users
id | naam | badge
badges
id | naam | functie
dan kun je de volgende records hebben bijv.
users
1 | Stefan | 1
badges
1 | dubbele verdiensten | dubbele verdiensten
zo heb je gerealiseerd dat de user stefan de badge met id 1 heeft en dus dubbele verdiensten heeft.
wil je dat een user meerdere badges kan krijgen, dan moet je het als volgt doen:
user
id | naam
badges
id | naam | functie
toegewezenbadges
id | userID | badgeID
dan kun je in toegewezenbadges meerdere records per user zetten.
hoop dat het zo een beetje duidelijk is.
Uiteraard kun je dit ook met een query aanpassen, zie hoofdstuk 13 van de MySQL-handleiding.
Je moet namelijk 3 tabelen hebben dus
Dat zijn:
User
===
badges
===
toegewezenbadges
===
maar wat is dan het script
en hoe weet de tabel in welke tabel
hij moet kijken welke badge id 1 is?
En natuurlijk ook niet de image url te
vergeten in badges ;)
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
users.naam
FROM
users,
badges,
toegewezenbadges
WHERE
users.id = toegewezenbadges.userID
AND
badges.id = toegewezenbadges.badgeID
AND
badges.naam = 'badge-naam'
users.naam
FROM
users,
badges,
toegewezenbadges
WHERE
users.id = toegewezenbadges.userID
AND
badges.id = toegewezenbadges.badgeID
AND
badges.naam = 'badge-naam'
Overige data kun je eenvoudig opvragen door het eerste deel van de query uit te breiden.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Code (php)
1
2
3
4
5
2
3
4
5
<?
$badges_sql = "SELECT * FROM leden, badges, toegewezenbadges user.id = toegewezenbadges.userID AND badges.id = toegewezenbadges.badgeID AND badges.naam = 'badge-naam";
$badges_res = mysql_query($badges_sql) or die ("Verbinding mislukt");
$badges_rows = mysql_num_rows($badges_res);
?>
$badges_sql = "SELECT * FROM leden, badges, toegewezenbadges user.id = toegewezenbadges.userID AND badges.id = toegewezenbadges.badgeID AND badges.naam = 'badge-naam";
$badges_res = mysql_query($badges_sql) or die ("Verbinding mislukt");
$badges_rows = mysql_num_rows($badges_res);
?>
Is dit goed om de badges te laten showen:
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
$badges_sql = "SELECT * FROM leden, badges, toegewezenbadges user.id = toegewezenbadges.userID AND badges.id = toegewezenbadges.badgeID AND badges.naam = 'badge-naam";
$badges_res = mysql_query($badges_sql) or die ("Verbinding mislukt");
$badges_rows = mysql_num_rows($badges_res);
if ($badges_rows == ''){
echo "Geen badges";
} else {
while($badges_array = mysql_fetch_array($badges_res)){
echo "<img src=\"".$badges_array['badges_img']."\" alt=\"".$badges_array['badges_beschrijving']."\" border=\"0\" /> ";
}
}
$select = "SELECT id FROM leden WHERE gebruikersnaam = '" . $_GET[mid] . "'";
?>
$badges_sql = "SELECT * FROM leden, badges, toegewezenbadges user.id = toegewezenbadges.userID AND badges.id = toegewezenbadges.badgeID AND badges.naam = 'badge-naam";
$badges_res = mysql_query($badges_sql) or die ("Verbinding mislukt");
$badges_rows = mysql_num_rows($badges_res);
if ($badges_rows == ''){
echo "Geen badges";
} else {
while($badges_array = mysql_fetch_array($badges_res)){
echo "<img src=\"".$badges_array['badges_img']."\" alt=\"".$badges_array['badges_beschrijving']."\" border=\"0\" /> ";
}
}
$select = "SELECT id FROM leden WHERE gebruikersnaam = '" . $_GET[mid] . "'";
?>
Gewijzigd op 01/01/1970 01:00:00 door Lill-mik
Het gebruik van een * moet je in elk geval altijd proberen te vermijden. Geef dus de kolomnamen op (met tabelnaam...) die je nodig hebt.
Opmerking: De foutmelding "Verbinding mislukt" slaat nergens op. Gebruik de functie mysql_error() voor de juiste foutmelding.
Edit: Verder is het jammer dat je de query zo ongelukkig en onoverzichtelijk noteert. Nu wil je blijkbaar gewoon fouten maken in de query!
Lijkt mij overzichtelijker...
Edit 2:
$_GET[mid] zal niet bestaan. Heb ik geloof ik al eerder gezegd. Dit moet zijn $_GET['mid'], dus met quotes.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Geen badges
zegt hij en over dat MID dat hoort er helemaal niet :P
heb al weg gehaald ;)
Maar het is dus fout ...
ik ben echt niet goed in php dus zie de fout niet echt ;(
Quote:
Wat zei ik ook al weer over het overzichtelijk noteren van een query? Begin daar eens mee, kijk dan wat er fout zit en probeer het nog eens.dus zie de fout niet echt
Dit soort fouten kun je eenvoudig oplossen door netjes te werken. Ik ga geen code voorkauwen, ik hoop dat je dat ook niet verwacht.
alles zelf proberen alleen het probleem
is dat het nooit lukt is dit trouwens beter:
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
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
<?php
$badges_sql = "
SELECT
users.naam
FROM
users,
badges,
toegewezenbadges
WHERE
users.id = toegewezenbadges.userID
AND
badges.id = toegewezenbadges.badgeID
AND
badges.naam = 'badge-naam' ";
$badges_res = "mysql_query($badges_sql) or die mysql_error()";
$badges_rows = mysql_num_rows($badges_res);
if ($badges_rows == ''){
echo "Geen badges";
} else {
while($badges_array = mysql_fetch_array($badges_res)){
echo "<img src=\"".$badges_array['badges_img']."\" alt=\"".$badges_array['badges_beschrijving']."\" border=\"0\" /> ";
}
}
?>
$badges_sql = "
SELECT
users.naam
FROM
users,
badges,
toegewezenbadges
WHERE
users.id = toegewezenbadges.userID
AND
badges.id = toegewezenbadges.badgeID
AND
badges.naam = 'badge-naam' ";
$badges_res = "mysql_query($badges_sql) or die mysql_error()";
$badges_rows = mysql_num_rows($badges_res);
if ($badges_rows == ''){
echo "Geen badges";
} else {
while($badges_array = mysql_fetch_array($badges_res)){
echo "<img src=\"".$badges_array['badges_img']."\" alt=\"".$badges_array['badges_beschrijving']."\" border=\"0\" /> ";
}
}
?>
of slaat dat nergens op..
Gewijzigd op 01/01/1970 01:00:00 door Lill-mik
En kijk nu eens goed naar de kleurtjes en dan met name naar regel 15. Daar gaat het goed fout!
Verder kun je nooit $badges_array['badges_img'] gaan echoen, de kolom badges_img haal je namelijk helemaal niet op uit de database... Je vraagt uitsluitend om users.naam
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
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
<?php
$badges_sql = "
SELECT
users.naam
FROM
users,
badges,
toegewezenbadges
WHERE
users.id = toegewezenbadges.userID
AND
badges.id = toegewezenbadges.badgeID
AND
badges.naam = 'badge-naam' ";
$badges_res = mysql_query($badges_sql) or die mysql_error();
$badges_rows = mysql_num_rows($badges_res);
if ($badges_rows == ''){
echo "Geen badges";
} else {
while($badges_array = mysql_fetch_array($badges_res)){
echo "<img src=\"".$badges_array['badges_img']."\" alt=\"".$badges_array['badges_beschrijving']."\" border=\"0\" /> ";
}
}
?>
$badges_sql = "
SELECT
users.naam
FROM
users,
badges,
toegewezenbadges
WHERE
users.id = toegewezenbadges.userID
AND
badges.id = toegewezenbadges.badgeID
AND
badges.naam = 'badge-naam' ";
$badges_res = mysql_query($badges_sql) or die mysql_error();
$badges_rows = mysql_num_rows($badges_res);
if ($badges_rows == ''){
echo "Geen badges";
} else {
while($badges_array = mysql_fetch_array($badges_res)){
echo "<img src=\"".$badges_array['badges_img']."\" alt=\"".$badges_array['badges_beschrijving']."\" border=\"0\" /> ";
}
}
?>
Zo beter nu alleen die
$badges_array['badges_img']
edit
Nogsteeds fout licht dat aan die badges array? :O
edit 2
Sorry van die array snap ik niks :(
Gewijzigd op 01/01/1970 01:00:00 door Lill-mik
Staan deze gegevens eigenlijk wel in jouw database? Dus in de tabellen die je in de query aanroept?
Zet na de while-lus ook eens
in je code. Dan krijg je te zien wat er allemaal in deze array staat.
De naam $badges_array vind ik persoonlijk niet zo'n fraaie. Ik zou eerder voor $row kiezen, het is tenslotte een rij (record) uit de database. Of anders $aBadges, waarbij de a voor 'array' staat. Een stukje korter en overzichtelijker.
En begin je scripts altijd met de volgende regels:
Dit had je al de nodige notices opgeleverd over niet-bestaande indexes.
En waar zijn dan badges_img en badges_beschrijving ? Die zijn er niet en kun je dus ook niet gaan gebruiken in de rest van je code.
Uit welke tabel moeten deze gegevens komen?
Een tabel users en een tabel badges.
Daarna een koppeltabel:
| ID | userid | badgeid |
daarin zet je dan de user id met de bijbehoorende badge.
Maar dit was voor dat ik in de gaten had dat iedereen maar 1 badge kon hebben. Dus nu zou ik gewoon een extra kolom aanmaken bij de users, en daarin zet je de badge.
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
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
<?php
$badges_sql = "
SELECT
users.naam
FROM
users,
badges,
toegewezenbadges
WHERE
users.id = toegewezenbadges.userID
AND
badges.id = toegewezenbadges.badgeID
AND
badges.naam = 'badge-naam'";
$badges_res = mysql_query($badges_sql) or die mysql_error();
$badges_rows = mysql_num_rows($badges_res);
if ($badges_rows == ''){
echo "Geen badges";
} else {
while($badges_array = mysql_fetch_array($badges_res)){
print_r($badges_array);
}
}
?>
$badges_sql = "
SELECT
users.naam
FROM
users,
badges,
toegewezenbadges
WHERE
users.id = toegewezenbadges.userID
AND
badges.id = toegewezenbadges.badgeID
AND
badges.naam = 'badge-naam'";
$badges_res = mysql_query($badges_sql) or die mysql_error();
$badges_rows = mysql_num_rows($badges_res);
if ($badges_rows == ''){
echo "Geen badges";
} else {
while($badges_array = mysql_fetch_array($badges_res)){
print_r($badges_array);
}
}
?>
heb ik nu....
de foutmelding:
Parse error: parse error, unexpected T_STRING in /storage/san/mijndomein/users/018844/public/sites/www.habbolife.nl/php systemen/vip/profiel.php on line 75
en ik heb nu 3 tabellen ervoor:
leden->> naam, id enzo
badges->> Naam, Id, beschrijfing, img
toegewezenbadges->> id, userID, badgeID
Ik snap het allemaal niet meer hoor sorry dat ik zo lastig ben... ik wil graag php kunnen alleen ik word niet vaak geholpen waardoor ik de scripts niet begrijp en het dus nooit kan leren ;(
@PHP Newbie: Zie het datamodel van Stefan. Daar staat al een koppeltabel: toegewezenbadges
Dit moet zijn:
die(mysql_error());
Dus met haakjes.
Tip: Gebruik eens een goede editor, die geeft dit soort syntaxfouten aan op het moment dat je ze maakt.
Edit: http://www.phpeclipse.de/tiki-view_articles.php
Gewijzigd op 01/01/1970 01:00:00 door Frank -
ja die heb ik ook in me database staan
Maar omdat iedereen maar 1 badge kan hebben, heb je geen koppeltabel nodig, en kun je gewoon bij leden een kolom 'badge' toevoegen
edit
Het script werkt nu wel alleen dat vip.users -.-
edit2
ben dat prog aant downe heet het wel:
eclipse SDK 3.2.1 ??
Gewijzigd op 01/01/1970 01:00:00 door Lill-mik