Query syntax voor koppeltabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Lill-mik

Lill-mik

01/10/2006 18:24:00
Quote Anchor link
Hey ben ik weer :P
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
 
PHP hulp

PHP hulp

05/05/2024 22:47:22
 
Stefan van Iwaarden

Stefan van Iwaarden

01/10/2006 18:28:00
Quote Anchor link
ik geloof dat ik dat topic ook even snel had gezien, maar je moet gewoon een aparte tabel maken waarin je de verschillende badges zet.

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.
 
Frank -

Frank -

01/10/2006 18:32:00
Quote Anchor link
Toevoeging op het model van Stefan: userID en badgeID zijn met een foreignkey gekoppeld aan de tabelen 'user' en 'badge'. Je hebt dus de innoDB-engine van MySQL nodig om dit te realiseren. Deze kun je zo eenvoudig selecteren in PMA bij het aanmaken van de tabel. Uiteraard kun je het later ook nog aanpassen, zie 1 van de tabbladen in PMA.

Uiteraard kun je dit ook met een query aanpassen, zie hoofdstuk 13 van de MySQL-handleiding.
 
Lill-mik

Lill-mik

01/10/2006 18:32:00
Quote Anchor link
Ik snap je wel maar welk script is daarvoor nodig..
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 ;)
 
Frank -

Frank -

01/10/2006 18:36:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'

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 -
 
Lill-mik

Lill-mik

01/10/2006 18:48:00
Quote Anchor link
Zoiets?:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


Is dit goed om de badges te laten showen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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] . "'";

?>
Gewijzigd op 01/01/1970 01:00:00 door Lill-mik
 
Frank -

Frank -

01/10/2006 18:55:00
Quote Anchor link
Die vraag kun je zelf beantwoorden door het te testen.

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!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
  naam
FROM
  tabelnaam
WHERE
  naam = 'waarde'

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 -
 
Lill-mik

Lill-mik

01/10/2006 19:00:00
Quote Anchor link
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /storage/san/mijndomein/users/018844/public/sites/www.habbolife.nl/php systemen/vip/profiel.php on line 64
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 ;(
 
Frank -

Frank -

01/10/2006 19:04:00
Quote Anchor link
Quote:
dus zie de fout niet echt
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.

Dit soort fouten kun je eenvoudig oplossen door netjes te werken. Ik ga geen code voorkauwen, ik hoop dat je dat ook niet verwacht.
 
Lill-mik

Lill-mik

01/10/2006 19:06:00
Quote Anchor link
nee verwacht ik ook niet ik wil juist
alles zelf proberen alleen het probleem
is dat het nooit lukt is dit trouwens beter:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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\" /> ";
     }
}


?>


of slaat dat nergens op..
Gewijzigd op 01/01/1970 01:00:00 door Lill-mik
 
Frank -

Frank -

01/10/2006 19:11:00
Quote Anchor link
Dit ziet er toch 100x beter uit, of niet dan?

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
 
Lill-mik

Lill-mik

01/10/2006 19:14:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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\" /> ";
     }
}


?>


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
 
Frank -

Frank -

01/10/2006 19:22:00
Quote Anchor link
Waarom ga je $badges_array['badges_img'] en $badges_array['badges_beschrijving'] echoen wanneer je deze gegevens niet opvraagd uit de database? Dat snap ik echt even niet.

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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
print_r($badges_array);
?>

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1 );
error_reporting(E_ALL);

// rest van je script
?>

Dit had je al de nodige notices opgeleverd over niet-bestaande indexes.
 
Frank -

Frank -

01/10/2006 19:24:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT
    users.naam

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?
 
PHP Newbie

PHP Newbie

01/10/2006 19:29:00
Quote Anchor link
koppeltabel.

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.
 
Lill-mik

Lill-mik

01/10/2006 19:31:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
     }
}


?>


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 ;(
 
Frank -

Frank -

01/10/2006 19:33:00
Quote Anchor link
@PHP Newbie: Zie het datamodel van Stefan. Daar staat al een koppeltabel: toegewezenbadges
 
Frank -

Frank -

01/10/2006 19:35:00
Quote Anchor link
die mysql_error();

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 -
 
Lill-mik

Lill-mik

01/10/2006 19:36:00
Quote Anchor link
ja die heb ik ook in me database staan
 
PHP Newbie

PHP Newbie

01/10/2006 19:36:00
Quote Anchor link
Maar omdat iedereen maar 1 badge kan hebben, heb je geen koppeltabel nodig, en kun je gewoon bij leden een kolom 'badge' toevoegen
 
Lill-mik

Lill-mik

01/10/2006 19:42:00
Quote Anchor link
lol nu zegt hij dat de tabel vip.users niet bestaat maar die vraagt hij nergens op -.-

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
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.