SQL INNER JOIN meerder tabellen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jos Verstraeten

Jos Verstraeten

17/09/2014 17:05:57
Quote Anchor link
Beste forum leden,

Ik heb een klein probleempje bij het weergeven van data uit meerdere tabellen.

Momenteel is dit mijn code:

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
$query = "SELECT
//ophalen tal van data die wel werkt
    SUM(o.status = 'afgewerkt') AS oefn,
    SUM(b.status = 'afgewerkt') AS begripn
FROM    users AS u
LEFT JOIN     ll AS l
    ON (u.inlog = l.inlog)
LEFT JOIN     oef AS o
    ON (u.inlog = o.speler)
LEFT JOIN     beg AS b
    ON (u.inlog = b.speler)
WHERE
code = '$code'
GROUP BY u.inlog";


Daarbij heb ik 4 tabellen,
users users, waar de normale gegevens van de gebruiker wordt opgeslagen,
ll waar een code staat gekoppeld aan een spel en enkele gegevens van het spel,
oef en beg zijn 2 tabellen die heel veel records bevatten,
wat ik nu probeer is uit beg en oef de records te tellen die als speler dezelfde naam hebben als hun inlog, maar ook status afgewerkt hebben. De query geeft geen fout melding, maar de SQL telt veel meer records dan dat er eigenlijk zijn. En er is geen regelmaat in, een speler die 3 rijen heeft met zijn inlog en status afgewerkt, komt er te voorschijn dat hij 45 rijen gevonden heeft ... .

Kan iemand mij helpen?
Alvast bedankt!
Gewijzigd op 17/09/2014 17:07:50 door Jos Verstraeten
 
PHP hulp

PHP hulp

22/11/2024 18:39:17
 
Obelix Idefix

Obelix Idefix

17/09/2014 21:05:20
Quote Anchor link
Kan het zijn dat je de verkeerde JOIN hebt (LEFT)?!
 
Ivo P

Ivo P

18/09/2014 09:29:21
Quote Anchor link
ik denk dat "//ophalen tal van data die wel werkt " nu net de fout bevat.

GROUP BY u.inlog

geeft aan dat er naast die 2 sum() regels hooguit 1 andere regel is, en daarin staat u.inlog.
Enige wat er verder bij zou mogen, zouden andere agregatie functies als sum(), count() of avg() zijn.

http://wiki.pfz.nl/group-by
 
Jos Verstraeten

Jos Verstraeten

19/09/2014 10:20:02
Quote Anchor link
Ik zal daar eens mee proberen spelen, Obelix ben wel vrij zeker dat het LEFT moet zijn omdat sommige date wel correct verschijnt ...
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/09/2014 11:50:24
Quote Anchor link
Dat je teveel rijen krijgt is inherent aan de manier waarop JOINS werken.

Als in de eerste tabel die gejoined wordt 3 records staan dan is het tussenresultaat 3 records met die login. Bv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
+---------+---------+
| u.login | l.login |
+---------+---------+
|   Jos   |   Jos   |
+---------+---------+
|   Jos   |   Jos   |
+---------+---------+
|   Jos   |   Jos   |
+---------+---------+

Met dat tussenresultaat wordt verder gewerkt, dus als in de volgende tabel weer 3 records staan voor 'Jos',
dan heb je in totaal al 9 records
 



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.