Tabellen koppelen en waarde uitegeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wes achternaam

wes achternaam

01/10/2013 15:26:06
Quote Anchor link
Hallo allemaal,

Ik zit met het volgende "probleem". Ik heb een database genaamd munten en ik heb een database genaamd users. Nu wil ik graag op mijn website laten verschijnen welke munten diegene heeft die is ingelogt.

Dus als volgt laat ik mijn munten zien:
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
27
28
29
30
31
32
33
34
35
36
<?PHP
$user_name
= "*****";
$password = "******";
$database = "munten";
$server = "localhost";
 
$db_handle = mysql_connect($server, $user_name, $password) or die (mysql_error());
$db_found = mysql_select_db($database, $db_handle);

    if ($db_found) {

        $SQL = "SELECT id, munt, jaar FROM ned_munten ORDER BY nummer ASC";
        // test $SQL = "SELECT id, munt, jaar FROM ned_munten INNER JOIN users_munten
        // test        ON(ned_munten_id = id AND user_id = 6)";


         $result = mysql_query($SQL);
            // error afhandeling
            if($result !==false){
            }

            else
            echo mysql_error();
            // end error afhandeling
        while ( $db_field = mysql_fetch_assoc($result) ) {

             echo $db_field['munt'];
             echo $db_field['jaar'] . "<BR>" ;
        
        }

        mysql_close($db_handle);
    }

     else {

        echo "Database kon niet gevonden worden: " . mysql_error();
         mysql_close($db_handle);
    }

?>


Zoals bij de test query kan je zien dat ik ook al een koppel tabel heb. Bij die test query laat hij alleen de munten zijn die gekoppeld zijn aan mijn user_id.

Dus is ik ben ingelogd en zie nu al mijn munten verschijnen die in de DB staan (uiteraard ;)) Maar nu wil ik achter veld jaar een 1 hebben staan als ik hem heb en een 2 als ik hem niet heb (wat ik later weer verander in een mooi plaatje van een plus en een min).

Hoe kan ik dit voor elkaar krijgen??

Groeten wessel

ps sorry als ik fouten heb gemaakt in mijn scripting maar ik ben ook geen doorgewinterde php'er. Dus graag opbouwende kritiek.
Gewijzigd op 01/10/2013 15:26:50 door Wes achternaam
 
PHP hulp

PHP hulp

17/11/2024 12:47:24
 
Erwin H

Erwin H

01/10/2013 15:46:39
Quote Anchor link
Wessel lakerveld op 01/10/2013 15:26:06:
Ik heb een database genaamd munten en ik heb een database genaamd users.

Bedoel je hier database, of tabel? Logisch zou zijn tabel, maar aangezien je een connectie maakt met de database 'munten' en het ook hebt over een koppeltabel, vrees ik dat je ook echt twee databases hebt.

Op zich kan je probleem dan nog best opgelost worden (zonder moeilijk te doen zelfs), maar het lijkt me niet heel erg nodig om echt twee databases aan te maken.

De oplossing dan, is een simpele join.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT id, munt, jaar, IF(user_id IS NULL, 0, 1) AS heb_ik
FROM ned_munten
LEFT JOIN users_munten ON(
  ned_munten_id = id
  AND user_id = 6
)

Jij gebruikte in je test een INNER JOIN, die zou ik vervangen door een LEFT JOIN. Het verschil is dat bij een INNER JOIN de records uit ned_munten niet worden geselecteerd als er geen record uit de users_munten aan kan worden gehangen. Bij een LEFT JOIN is dat wel het geval. Wil je alleen de munten zien die je hebt, dan kan je een INNER JOIN gebruiken, wil je alle munten zien met daarbij of je ze hebt, dan heb je een LEFT JOIN nodig.
In de kolom 'heb_ik' kan je nu die 0 (heb ik niet) of de 1 (heb ik wel) zien.

disclaimer: kijk wel even goed naar de kolommen en tabellen. Ik heb simpel overgenomen wat je al had, dus geen idee of het klopt.
 
Q S

Q S

01/10/2013 16:02:31
Quote Anchor link
Ah zo was het inderdaad. Ik kon het zo snel niet meer vinden. In SQL gaat dat net anders.

in plaats van
IF(user_id IS NULL, 0, 1) AS heb_ik

doe ik daar
ISNULL(user_id,0) AS heb_ik

maar de truc is inderdaad een LEFT JOIN.

korte uitleg welliswaar engels.

Before we continue with examples, we will list the types the different SQL JOINs you can use:
INNER JOIN: Returns all rows when there is at least one match in BOTH tables
LEFT JOIN: Return all rows from the left table, and the matched rows from the right table
RIGHT JOIN: Return all rows from the right table, and the matched rows from the left table
FULL JOIN: Return all rows when there is a match in ONE of the tables
 
Wes achternaam

wes achternaam

01/10/2013 16:09:54
Quote Anchor link
Bedankt voor de snelle reacties. Ik kan gelijk weer verder met uitproberen.

Ik heb idd twee databases. 1tje voor users en anders voor munten.
mijn koppel tabel staat in de database munten.

Is de kolom heb_ik een nieuwe kolom die ik moet aanmaken in de koppel tabel of in de ned_munten tabel??

Ik heb de nieuwe join query gebruikt. Hij laat nu alles zien maar ik zie geen 1 of 2 erachter. In eerste instantie dacht ik dat dat met een if statement moest. Zoiets als:
If ned_munten_id = id AND user_id = 6 then (schrijf 1) else (schrijf 2)
Dat dacht ik maar ja kan er helemaal naast zitten.
Gewijzigd op 01/10/2013 16:22:10 door wes achternaam
 
Q S

Q S

01/10/2013 16:22:51
Quote Anchor link
Ik zou van die twee databases 1 database maken.

heb_ik is geen kolom die je moet aanmaken. maar je kunt m wel gebruiken voor je echo.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
  while ( $db_field = mysql_fetch_assoc($result) ) {

             echo $db_field['munt'];
         echo $db_field['heb_ik'];    
             echo $db_field['jaar'] . "<BR>" ;
        
        }
 
Wes achternaam

wes achternaam

01/10/2013 16:28:01
Quote Anchor link
oh ja zie het al thnx!!!

Maar waarom 1 database maken??
 
Q S

Q S

01/10/2013 16:33:01
Quote Anchor link
Je maakt het jezelf een stuk makkelijker met 1 database, dat is naar mijn mening de voornaamste reden.
 
Erwin H

Erwin H

01/10/2013 17:10:34
Quote Anchor link
Als je twee databases gebruikt zal je voor de tabel naam nog de database naam moeten zetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT id, munt, jaar, IF(user_id IS NULL, 0, 1) AS heb_ik
FROM ned_munten
LEFT JOIN users.users_munten ON(
  ned_munten_id = id
  AND user_id = 6
)

Maar beter is er 1 database van maken, omdat het simpelweg bij elkaar hoort. Het verschil tussen de entiteiten leg je al door het in verschillende tabellen te stoppen. Verder moet je altijd meer werk verzetten zelf (door rechten toe te kennen aan meerdere databases bijvoorbeeld), moet mysql meer werk verzetten (door het openen van 2 databases in plaats van 1) en heb je bij sommige hosts uberhaupt de mogelijkheid niet om meerdere databases aan te maken.
 



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.