query: score per user berekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mr D

Mr D

15/03/2007 16:02:00
Quote Anchor link
doel van de query is kijken per user hoeveel wedstrijden deze goed heeft voorspelt, per goed voorspelde wedstrijd krijgt de user 3 punten

Nu is er ook nog de mogelijkheid tot het inzetten van een joker. In dit geval moeten er voor die wedstrijd geen 3 maar 6 punten worden toegekend. De tabel joker ziet er zo uit

user_id | wedstrijd_id

query die ik nu heb:

SELECT
COUNT(*) * 3 + COUNT(joker.wedstrijd_id) * 3
AS score,
voorspelling.user_id
FROM voorspelling
INNER JOIN wedstrijd ON
(voorspelling.thuis_score = wedstrijd.thuis_score AND voorspelling.uit_score = wedstrijd.uit_score)
LEFT JOIN joker ON
(wedstrijd.id = joker.wedstrijd_id)
WHERE
wedstrijd.id IN(".implode(',', $wedstrijden).")
GROUP BY voorspelling.user_id

probleem bij deze query is dat bij elke user alle jokers worden meegeteld. Hoe verwerk ik nu de joker.userid nog in de query?
 
PHP hulp

PHP hulp

21/11/2024 19:03:32
 
Robert Deiman

Robert Deiman

15/03/2007 16:15:00
Quote Anchor link
Je hebt nu op wedstrijdid alleen gedaan, maar je moet de JOIN zo zien:

Het deel tussen () vorm een nieuwe tabel waarop je de JOIN kan uitvoeren. Ga eens naar de JOIN tutorial die je links wel zal zien staan, daarin wordt een JOIN met meerdere tabellen uitgelegd. Die moet jij gebruiken om tot het juiste resultaat te komen.
 
Mr D

Mr D

15/03/2007 16:27:00
Quote Anchor link
snap je niet helemaal,

deze query werkt dus op zich wel, alleen hij pakt dus bij elke user als jokers in de tabel joker terwijl die alleen moet kijken naar de jokers per user
 
Robert Deiman

Robert Deiman

15/03/2007 16:46:00
Quote Anchor link
Mr D

De opbouw van een JOIN met meerdere tabellen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT gegevens
FROM hoofdtabel -> users denk ik voor jou
INNER JOIN(
   subtabel1 -> denk voorspelling
   INNER JOIN(
       subtabel2 -> denk wedstijd
       INNER JOIN
       subtabel3 -> zou dan joker zijn
       ON .....)
   ON ....)
ON....


Dit stukje maakt als het ware een nieuwe tabel, waarin de joker en de wedstrijd tabel al zijn gekoppeld.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
subtabel2 -> denk wedstijd
       INNER JOIN
       subtabel3 -> zou dan joker zijn
       ON ....


Volgend stukje maakt van die hiervoor genoemde "nieuwe tabel" van joker en wedstrijden en de voorspellingstabel weer een nieuwe tabel als het ware.
Zo gaat dat steeds verder. (hopelijk is dit duidelijk, maar wat ik bedoel is dat je die tut maar eens moet lezen, omdat je nu de JOIN op een verkeerde manier gebruikt.
 
Mr D

Mr D

15/03/2007 16:51:00
Quote Anchor link
snap het principe wel, maar de toepassing lukt nog niet helemaal. In jouw voorbeeld zie ik ook overal een INNER JOIN. een joker is bestaat maar bij bepaalde wedstrijden, dus moet dat niet een LEFT JOIN worden
 
Robert Deiman

Robert Deiman

15/03/2007 16:56:00
Quote Anchor link
Dat zou je kunnen proberen, al durf ik je niet te zeggen dat het werkt.

Maar kijk maar eens naar de syntax van mijn query, je ziet overal een INNER JOIN, maar het is een heel andere query dan die van jou. Je moet hem als het ware van binnen naar buiten lezen. De binnenste JOIN (let hierbij op: dat is het stukje dat tussen de binnenste 2 () staat) wordt gebruikt voor die daarom heen. Je koppeld nu alle tabellen. Jij zet gewoon 2 keer een JOIN erin zonder dat daar logica in zit. Je zal een beetje moeten spelen met de volgorde van de tabellen in de query zoals ik hem voor deed in de vorige post.
 
Mr D

Mr D

15/03/2007 17:00:00
Quote Anchor link
heb het al opgelost, bleek toch veel simpeler dan gedacht
oplossing:
SELECT
COUNT(*) * 3 + COUNT(joker.wedstrijd_id) * 3
AS score,
voorspelling.user_id
FROM voorspelling
INNER JOIN wedstrijd ON
(voorspelling.thuis_score = wedstrijd.thuis_score AND voorspelling.uit_score = wedstrijd.uit_score)
LEFT JOIN joker ON
(wedstrijd.id = joker.wedstrijd_id AND voorspelling.user_id = joker.user_id)
WHERE
wedstrijd.id IN(".implode(',', $wedstrijden).")
GROUP BY voorspelling.user_id
 



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.