Hallo,

Ik heb een werkende query namelijk:


SELECT
			lid.voornaam,
			lid.achternaam,
			lid.teams,
			lid.id,
			COUNT(g.leden_id) aantal_goals
		FROM
	    		(SELECT
				l.id,
				l.voornaam,
				l.achternaam,
				t.team AS teams
			FROM
				Leden AS l
			JOIN
				Teamindeling AS ti
			ON 
				(l.id = ti.leden_id)
			JOIN
				Teams AS t
			ON 
				(t.id = ti.team_id)
			WHERE 
				ti.taak = 'Speler' 
			AND 
				ti.seizoen = '2013/2014'
			AND
				t.leeftijd = 'Junioren'
			GROUP BY 
				l.id, 
				l.voornaam, 
				l.achternaam
	    		) AS lid
		LEFT JOIN 
			Goals AS g
		ON
	    		(lid.id = g.leden_id) AND g.seizoen = '". $seizoen. "' AND g.wie LIKE 'ZSC%'
		LEFT JOIN
			Wedstrijden AS w
		ON
				(g.wedstrijd_id = w.id) 
		WHERE 
			w.soort = 'Competitie'
		GROUP BY
			lid.voornaam, 
			lid.achternaam, 
			lid.teams 
		ORDER BY
			lid.teams,
			aantal_goals DESC


Nu telt deze query per team uit hoeveel goals een persoon gemaakt heeft (ook als deze goals heeft gemaakt in een ander team telt hij deze mee)

Wat ik nu graag zou willen is dat hij per persoon uittelt hoe vaak hij per team gescoord heeft.

Dus wat ik nu krijg:

Jantje - 3 goals A1 (1x in A1 , 2x in B1)
Pietje - 3 goals A1 (3x in A1)
----------
Klaasje - 1 goal B1

Wat ik dus zou willen:

Pietje - 3 goals A1
Jantje - 1 goal A1
----------
Jantje - 2 goals B1
Klaasje - 1 goal B1

Hoe kan ik deze query aanpassen dat hij dus de goals per persoon per team telt.
Ik heb zelf al vanalles geprobeerd maar zie het helaas niet meer.

Hoop dat het een beetje duidelijk is.

Alvast bedankt!
Daar ben ik weer,

Na flink puzzelen heb ik het volgende:

http://www.zscwesterhoven.nl/test.php?o=2

http://www.zscwesterhoven.nl/uitlegplaatje.jpg

Zoals op het plaatje te zien krijg ik nu de teams waar ze gescoord hebben en de teams waar ze in spelen te zien. Nu zouden ze alleen nog gecount moeten worden (per t.team) en gegroepeerd worden.

Wie kan me hiermee helpen?


SELECT 
	l.voornaam,
    l.achternaam,
    g.wie,
    g.leden_id,
    t.team
FROM
	Goals AS g
LEFT JOIN
	Leden AS l
ON
	g.leden_id = l.id
LEFT JOIN
	Wedstrijden AS w
ON
	g.wedstrijd_id = w.id
LEFT JOIN
	Teamindeling AS ti
ON
	g.leden_id = ti.leden_id AND ti.taak = 'Speler' AND ti.seizoen = '2013/2014'
LEFT JOIN
	Teams AS t
ON
	ti.team_id = t.id
WHERE
	g.seizoen = '2013/2014'
AND
	w.soort = 'Competitie'
AND
	g.wie LIKE 'ZSC%'
AND
	t.leeftijd = 'Junioren'
Heb je de query die ik gaf al uit geprobeerd?
Jazeker, zie 2à3 posts terug, over die union en de tt id die niet bestaat.
Altijd wel even contoleren op veldnamen, ik heb de gewoonte om een id kolom de enkelvoudige naam van de tabel mee te geven (i.e. in teams -> team_id).

UNION is de resultaten van twee query's samenvatten, dus wat ik doe in subquery is eerst de spelers selecteren bij het team waarin ze zijn ingedeeld, en daarna pak ik het de teams erbij waarvoor ze ook zijn uitgekomen vanuit de goals tabel.

Als je aan dingen twijfelt moet je gewoon zo'n subquery los uit proberen in jouw favoriete SQL tool
Zo was ik dus inderdaad tot mijn laatste post gekomen.

Ik ga nu die query van jou nog eens proberen.

Toevoeging op 20/05/2014 20:29:39:

Ik gebruik nu dit:

SELECT
    t.team,
    l.voornaam,
    l.achternaam,
    COUNT(g.leden_id) AS aantal_goals
FROM
    Teams t
JOIN
    (SELECT
        team_id,
        leden_id
    FROM
        Teamindeling
    WHERE 
        seizoen = '2013/2014'
        AND
        taak = 'Speler'
    UNION
        SELECT DISTINCT
            tt.id,
            go.leden_id
        FROM
            Goals go
        JOIN
            Teams tt
            ON go.wie = tt.team
        WHERE
            tt.leeftijd = 'Junioren' AND go.seizoen = '2013/2014'    
    ) ti
    ON t.id = ti.team_id
JOIN
    Leden l
    ON ti.leden_id = l.id
LEFT JOIN
    Goals g
    ON l.id = g.leden_id AND g.seizoen = '2013/2014' AND g.wie = t.team
LEFT JOIN
    Wedstrijden w
    ON g.wedstrijd_id = w.id AND w.soort = 'Competitie'
WHERE
    t.leeftijd = 'Junioren'
GROUP BY
    t.team,
    l.voornaam,
    l.achternaam
ORDER BY
    t.team, aantal_goals DESC


Maar dit geeft niet het gewenste resultaat.

Zie http://www.zscwesterhoven.nl/test.php?o=1
Linkse kolom = Goede aantal goals, zonder spelers uit andere teams
Rechtse kolom = Spelers uit andere teams erbij, aantallen niet goed

Ergens telt hij nu te veel goals. En ook zie ik graag achter de naam het Team uit de teamindeling, en niet het team waar de goals in zijn gemaakt. Dit heeft denk ik te maken met select t.team bovenaan in de query.

(Het lijkt erop dat alles x3 en/of x2 is gedaan)
>> Als je aan dingen twijfelt moet je gewoon zo'n subquery los uit proberen in jouw favoriete SQL tool

Als dingen niet werken zoals je verwacht, moet je de query gaan debuggen, en dat betekent stukje voor stukje opbouwen.

Ik kan niet in jouw database gegevens kijken, dus kan (en wil) het ook niet uittesten.

Klinkt misschien een beetje bot, maar zo heb ik het ook geleerd.
Uiteindelijk is het dan volgens mij toch gelukt en is het volgende de oplossing geweest:


elseif ($_GET['o'] == "2") {
	$query1 = " 
		SELECT 
			team 
		FROM 
			Teams
		WHERE 
			seizoen = '". $seizoen. "'
		AND
			leeftijd = 'Junioren'
		";
	$res1=mysql_query($query1) or die(mysql_error());
	echo '<table class="buiten" style="border:1px solid black;">';
	echo '<tr><th colspan="4">Topscoorders Junioren - Per Team</th></tr>';
	while ($row1 = mysql_fetch_array($res1)) {
		echo '<tr><th colspan="4">'. $row1['team']. '</td></tr>';
		$query = "
			SELECT 
			    l.voornaam,
			    l.achternaam,
			    g.wie,
			    COUNT(g.leden_id) AS aantal_goals,
			    t.team
			FROM
			    Goals AS g
			LEFT JOIN
			    Leden AS l
			ON
			    g.leden_id = l.id
			LEFT JOIN
			    Wedstrijden AS w
			ON
			    g.wedstrijd_id = w.id
			LEFT JOIN
			    Teamindeling AS ti
			ON
			    g.leden_id = ti.leden_id AND ti.taak = 'Speler' AND ti.seizoen = '". $seizoen. "'
			LEFT JOIN
			    Teams AS t
			ON
			    ti.team_id = t.id
			WHERE
			    g.seizoen = '". $seizoen. "'
			AND
			    w.soort = 'Competitie'
			AND
			    g.wie = '". $row1['team']. "'
			AND
			    t.leeftijd = 'Junioren'
	        	GROUP BY
	        		g.leden_id,g.wie
	       		ORDER BY
	        		g.wie,
				aantal_goals DESC,
				l.achternaam
		";
		$res=mysql_query($query) or die(mysql_error());
		while ($row=mysql_fetch_array($res)){
			echo '<tr>';
			echo '<td align="left" width="80">'. $row['voornaam']. '</td>';
			echo '<td align="left" width="120">'. $row['achternaam']. '</td>';
			echo '<td align="left" width="100">'. $row['team']. '</td>';
			echo '<td align="right" width="50">'. $row['aantal_goals']. '</td>';
			echo '</tr>';
		}
		$query2 = "SELECT COUNT(g.leden_id) AS aantal_goals FROM Goals AS g LEFT JOIN Wedstrijden AS w ON g.wedstrijd_id = w.id WHERE g.wie = '". $row1['team']. "' AND g.leden_id = '0' AND w.soort = 'Competitie' AND w.seizoen = '". $seizoen. "'";
		$res2=mysql_query($query2) or die(mysql_error());
		$row2=mysql_fetch_array($res2);
		echo '<tr>';
		echo '<td align="left" colspan="3">Eigen goals door Tegenstander</td>';
		echo '<td align="right" width="100">'. $row2['aantal_goals']. '</td>';
		echo '</tr>';
		echo '<tr><th colspan="4">'. $row['wie']. '</td></tr>';
	}
		echo '</td>';
		echo '</tr>';
		echo '</table>';
}


Ger, iniedergeval bedankt voor het helpen!

Misschien heb je nog wat tips/opmerkingen over dit scriptje?
>>Als ik alleen die SELECT met UNION query gebruik komt daar 3x team_id (32,6,55) naar voren met 3x leden_id 167

Dat is precies de bedoeling, de subquery is bedoeld om een virtuele teamindeling te genereren.
Je moet alleen tt.team meenemen in de SELECT meenemen, en daar de goals tabel op joinen.

Als je het team erbij wilt waar een speler oorspronkelijk is ingedeeld, moet je de teamindeling nogmaals joinen (na leden)
Ik heb het nu iniedergeval werkend, maar ik ga nog zeker eens naar jou query met laatstgenoemde tips kijken.
Met jouw query krijg je alleen spelers te zien die gescoord hebben.

Met mijn query krijg je altijd alle spelers te zien die bij een team zijn ingedeeld.
Wil je dan toch alleen maar de spelers zien die gescoord hebben voeg je een having clause aan de group by toe.

Daarnaast is de goals tabel de meest uitgebreide tabel, dus dat scheelt een hele hoop performance.

Reageren