Query resultaten samenvoegen
Ik gebruik al een tijdje een scriptje om wedstrijden van een bepaalde speler te laten zien. Nu ben ik er achter dat als een speler bij 2 teams zit, hij random 1 team neemt. Hiermee ben ik aan de slag gegaan zodat hij nu elk team uitfiltert. Nu zou ik deze graag in een dropdown menutje zetten, zodat ik hier zonder pagina reload in kan switchen. (Of via een ajax call?)
Dit is mijn output nu:
Hallo Danny,
Knvb: MMPB117
Team: ZSC 5
Goals: 0
Team: ZSC Veteranen
Goals: 0
-Mijn gegevens aanvullen-
-Dit ben ik niet-
Je volgende wedstrijd
is nog niet bekend.
Wat ik dus eigenlijk wil is dat hij iedere output bij Team samenvoegt en daar de goals aan hangt.
Hopelijk begrijpen jullie wat ik bedoel en kunnen jullie me hier mee op weg helpen.
Code (php)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
if ($acoord == 'OK') {
$query ="
SELECT
l.id,
l.knvb,
l.voornaam,
l.achternaam,
t.team_id,
teams.team
FROM
Ip as i
LEFT JOIN
Leden as l
ON
(l.id = i.id)
LEFT JOIN
Teamindeling as t
ON
(l.id = t.leden_id) AND t.seizoen = '". $seizoen. "'
LEFT JOIN
Teams as teams
ON
(t.team_id = teams.id)
LEFT JOIN
Statistieken as s
ON
(l.id = s.leden_id) AND s.seizoen = '". $seizoen. "'
WHERE
i.ip = '". $_SERVER['REMOTE_ADDR']. "'
AND
i.id != ''
GROUP BY
t.team_id
ORDER BY
t.taak DESC
";
$result = mysql_query($query) or die(mysql_error());
$team = array();
$boven = 0;
if ( mysql_num_rows($result) >= 1 ) {
while ($row = mysql_fetch_array($result)){
if ( $boven == 0 ) {
$SESSION['suser'] = $row['voornaam']. " ". $row['achternaam'];
$SESSION['id'] = $row['id'];
$team[] = $row['team'];
echo '<div id="rechtsbb">';
echo '<table width="145">';
echo '<tr>';
echo '<td align="left" colspan="2">';
echo 'Hallo '. $row['voornaam']. ',<br>';
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td align="left">Knvb:</td><td align="right">'. $row['knvb']. '</td>';
echo '</tr><tr>';
}
$boven = 1;
if ( $row['team_id'] != NULL) {
$que1 ="SELECT
COUNT(g.leden_id) AS goals
FROM
Goals AS g
LEFT JOIN
Wedstrijden AS w
ON
(g.wedstrijd_id = w.id)
WHERE
g.leden_id = '". $SESSION['id']. "'
AND
w.seizoen = '". $seizoen. "'";
if ( $team == 'ZSC Veteranen' ) {
$que1 .= "AND w.soort = 'Vriendschappelijk'";
}
else {
$que1 .= "AND w.soort = 'Competitie'";
}
$que1 .="AND
g.wie = '". $team. "'";
$res1 = mysql_query($que1) or die(mysql_error());
$row1 = mysql_fetch_array($res1);
echo '<td align="left">Team:</td><td align="right">'. $row['team']. '</td>';
echo '</tr><tr>';
echo '<td align="left">Goals:</td><td align="right">'. $row1['goals']. '</td>';
echo '</tr>';
}
}
echo '<tr>';
echo '<td colspan="2" align="center">';
echo '<form action="gegevens.php" target="contentframe" method="POST">';
echo '<input type="hidden" name="idtje" value="'. $row['id']. '">';
echo '<input class="input" type="submit" name="submit2" value="Mijn gegevens aanvullen">';
echo '</form>';
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2" align="center">';
echo '<form action="'. $_SERVER['REQUEST_URI']. '" method="POST">';
echo '<input type="hidden" name="ip" value="'. $_SERVER['REMOTE_ADDR']. '">';
echo '<input class="input" type="submit" name="submit1" value="Dit ben ik niet">';
echo '</form>';
echo '</td>';
echo '</tr>';
echo '</table>';
echo '</div>';
echo '<div id="rechtsbo">';
echo 'Je volgende wedstrijd<br>';
$query= "
SELECT
w.team_1,
w.team_2,
DATE_FORMAT(w.datum, '%a %d %M') as datum1,
TIME_FORMAT(w.tijd, '%H:%i') as tijd
FROM
Wedstrijden AS w
LEFT JOIN
Teams AS team
ON
team.team = w.competitie
LEFT JOIN
Teamindeling AS t
ON
t.team_id = team.id AND t.seizoen = '". $seizoen. "'
WHERE
t.leden_id = '". $row['id']. "'
AND
( ( w.datum > DATE_FORMAT(NOW(),'%Y-%m-%d') ) OR ( w.datum = DATE_FORMAT(NOW(),'%Y-%m-%d') AND DATE_FORMAT(w.tijd,'%H:%i') > DATE_FORMAT(NOW(),'%H:%i') ))
AND
(uitslag_t1 IS NULL OR uitslag_t1 = '')
AND
w.seizoen = '". $seizoen. "'
ORDER BY
datum ASC,
tijd ASC
LIMIT 1
";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
if ( mysql_num_rows($result) > '0') {
echo '<table align="center">';
echo '<tr>';
echo '<td colspan="3" align="center">'. $row['datum1']. ' '. $row['tijd']. '</td>';
echo '</tr><tr>';
echo '<td align="center">'. stripcslashes($row['team_1']). '</td>';
echo '</tr><tr>';
echo '<td align="center">-</td>';
echo '</tr><tr>';
echo '<td align="center">'. stripcslashes($row['team_2']). '</td>';
echo '</tr>';
echo '</table>';
}
else {
echo 'is nog niet bekend.';
}
echo '</div>';
}
$query ="
SELECT
l.id,
l.knvb,
l.voornaam,
l.achternaam,
t.team_id,
teams.team
FROM
Ip as i
LEFT JOIN
Leden as l
ON
(l.id = i.id)
LEFT JOIN
Teamindeling as t
ON
(l.id = t.leden_id) AND t.seizoen = '". $seizoen. "'
LEFT JOIN
Teams as teams
ON
(t.team_id = teams.id)
LEFT JOIN
Statistieken as s
ON
(l.id = s.leden_id) AND s.seizoen = '". $seizoen. "'
WHERE
i.ip = '". $_SERVER['REMOTE_ADDR']. "'
AND
i.id != ''
GROUP BY
t.team_id
ORDER BY
t.taak DESC
";
$result = mysql_query($query) or die(mysql_error());
$team = array();
$boven = 0;
if ( mysql_num_rows($result) >= 1 ) {
while ($row = mysql_fetch_array($result)){
if ( $boven == 0 ) {
$SESSION['suser'] = $row['voornaam']. " ". $row['achternaam'];
$SESSION['id'] = $row['id'];
$team[] = $row['team'];
echo '<div id="rechtsbb">';
echo '<table width="145">';
echo '<tr>';
echo '<td align="left" colspan="2">';
echo 'Hallo '. $row['voornaam']. ',<br>';
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td align="left">Knvb:</td><td align="right">'. $row['knvb']. '</td>';
echo '</tr><tr>';
}
$boven = 1;
if ( $row['team_id'] != NULL) {
$que1 ="SELECT
COUNT(g.leden_id) AS goals
FROM
Goals AS g
LEFT JOIN
Wedstrijden AS w
ON
(g.wedstrijd_id = w.id)
WHERE
g.leden_id = '". $SESSION['id']. "'
AND
w.seizoen = '". $seizoen. "'";
if ( $team == 'ZSC Veteranen' ) {
$que1 .= "AND w.soort = 'Vriendschappelijk'";
}
else {
$que1 .= "AND w.soort = 'Competitie'";
}
$que1 .="AND
g.wie = '". $team. "'";
$res1 = mysql_query($que1) or die(mysql_error());
$row1 = mysql_fetch_array($res1);
echo '<td align="left">Team:</td><td align="right">'. $row['team']. '</td>';
echo '</tr><tr>';
echo '<td align="left">Goals:</td><td align="right">'. $row1['goals']. '</td>';
echo '</tr>';
}
}
echo '<tr>';
echo '<td colspan="2" align="center">';
echo '<form action="gegevens.php" target="contentframe" method="POST">';
echo '<input type="hidden" name="idtje" value="'. $row['id']. '">';
echo '<input class="input" type="submit" name="submit2" value="Mijn gegevens aanvullen">';
echo '</form>';
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2" align="center">';
echo '<form action="'. $_SERVER['REQUEST_URI']. '" method="POST">';
echo '<input type="hidden" name="ip" value="'. $_SERVER['REMOTE_ADDR']. '">';
echo '<input class="input" type="submit" name="submit1" value="Dit ben ik niet">';
echo '</form>';
echo '</td>';
echo '</tr>';
echo '</table>';
echo '</div>';
echo '<div id="rechtsbo">';
echo 'Je volgende wedstrijd<br>';
$query= "
SELECT
w.team_1,
w.team_2,
DATE_FORMAT(w.datum, '%a %d %M') as datum1,
TIME_FORMAT(w.tijd, '%H:%i') as tijd
FROM
Wedstrijden AS w
LEFT JOIN
Teams AS team
ON
team.team = w.competitie
LEFT JOIN
Teamindeling AS t
ON
t.team_id = team.id AND t.seizoen = '". $seizoen. "'
WHERE
t.leden_id = '". $row['id']. "'
AND
( ( w.datum > DATE_FORMAT(NOW(),'%Y-%m-%d') ) OR ( w.datum = DATE_FORMAT(NOW(),'%Y-%m-%d') AND DATE_FORMAT(w.tijd,'%H:%i') > DATE_FORMAT(NOW(),'%H:%i') ))
AND
(uitslag_t1 IS NULL OR uitslag_t1 = '')
AND
w.seizoen = '". $seizoen. "'
ORDER BY
datum ASC,
tijd ASC
LIMIT 1
";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
if ( mysql_num_rows($result) > '0') {
echo '<table align="center">';
echo '<tr>';
echo '<td colspan="3" align="center">'. $row['datum1']. ' '. $row['tijd']. '</td>';
echo '</tr><tr>';
echo '<td align="center">'. stripcslashes($row['team_1']). '</td>';
echo '</tr><tr>';
echo '<td align="center">-</td>';
echo '</tr><tr>';
echo '<td align="center">'. stripcslashes($row['team_2']). '</td>';
echo '</tr>';
echo '</table>';
}
else {
echo 'is nog niet bekend.';
}
echo '</div>';
}
Alvast bedankt voor het meedenken!
Gewijzigd op 13/08/2014 09:58:36 door D B
a) je hebt geen aggegrate functie in je SELECT
b) je groepeert niet op ALLE kolommen in de select die niet in een aggegrate functie staan.
En gebruik ook geen left join wanneer dat niet specifiek nodig is.
Allereerst, bedankt voor je reactie weer!
De query zoals ik hem gebruik werkt eigenlijk perfect, het gaat me eigenlijk om de output van team en goals, deze zouden aan elkaar gekoppeld moeten zijn en oproepbaar door bijvoorbeeld een dropdown menu.
Toch wil ik graag verder op jou antwoorden in gaan, omdat ik mijn query ook zo perfect mogelijk wil hebben. Waarschijnlijk kun jij de 2 query's die ik gebruik ook in 1 query kwijt, maar dit lukt me zelf nog niet. Nu is het niet zo dat ik je ga vragen om dit te doen, maar ik zou graag willen weten wat je precies bedoelt met:
a) je hebt geen aggegrate?? functie in je SELECT
b) je groepeert niet op ALLE kolommen in de select die niet in een aggegrate functie staan.
c) en gebruik ook geen left join wanneer dat niet specifiek nodig is.
a) waarschijnlijk is dit een beginnersvraag, maar zou je mij in makkelijke taal uit kunnen leggen wat dit precies betekent?
b) zal dan waarschijnlijk ook makkelijker worden.
c) kun je hier wat specifieker in zijn? deze zie ik niet namelijk.
Alvast bedankt!
Aggegrate functies zijn COUNT, AVG, SUM, MIN, MAX etc.
Die staan niet nergens in de select clause dus heeft de group by geen zin (je kan dan beter SELECT DISTINCT gebruiken)
In sommige DBM systemen krijg je een foutmelding voorgeschoteld (zoals het hoort)
b)
Zie ook link
c)
Een left join betekent alle records die in de tabel(len) die aan de linkerkant van de join staan meenemen.
In de derde query begin je met de tabel wedstrijden, dat betekent dus dat je in eerste instantie alle wedstrijden in het (tussen)resultaat hebt, daarna ga je in de WHERE op waardes filteren die in een left gejoinde tabel staan, wat hetzelfde effect heeft als een INNER JOIN. Dit kan als gevolg hebben dat je query (beduidend) langer gaat duren.
Code (php)
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
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
SELECT DISTINCT
l.id,
l.knvb,
l.voornaam,
l.achternaam,
t.team_id,
teams.team
FROM
Ip as i
LEFT JOIN
Leden as l
ON
(l.id = i.id)
LEFT JOIN
Teamindeling as t
ON
(l.id = t.leden_id) AND t.seizoen = '". $seizoen ."'
LEFT JOIN
Teams as teams
ON
(t.team_id = teams.id)
LEFT JOIN
Statistieken as s
ON
(l.id = s.leden_id) AND s.seizoen = '". $seizoen. "'
WHERE
i.ip = '". $_SERVER['REMOTE_ADDR']. "'
AND
i.id != ''
ORDER BY
t.taak DESC
l.id,
l.knvb,
l.voornaam,
l.achternaam,
t.team_id,
teams.team
FROM
Ip as i
LEFT JOIN
Leden as l
ON
(l.id = i.id)
LEFT JOIN
Teamindeling as t
ON
(l.id = t.leden_id) AND t.seizoen = '". $seizoen ."'
LEFT JOIN
Teams as teams
ON
(t.team_id = teams.id)
LEFT JOIN
Statistieken as s
ON
(l.id = s.leden_id) AND s.seizoen = '". $seizoen. "'
WHERE
i.ip = '". $_SERVER['REMOTE_ADDR']. "'
AND
i.id != ''
ORDER BY
t.taak DESC
Omdat ik hier eigenlijk geen aggegrate functie bij nodig heb (aggegrate functie is een alleen nodig bij een 'berekening'(telfunctie) als ik het goed begrijp)
Het verschil tussen je eerste en deze, is dat door de GROUP BY die alleen op team_id groepeerde, je in die query voor elk team 1 record terug kreeg. Nu heb je een DISTINCT en die haalt elk record op waarvoor de combinatie van alle kolommen uniek is. Dat kunnen dus veel meer records zijn.
Zou iemand van jullie ook nog naar het andere deel van mijn vraag willen kijken:
nl. Hoe kan ik nu het beste de output van mijn 2de query samenvoegen (wil dit later misschien ook nog uitbreiden dat je meerdere mensen op 1 ip kunt hebben, dus dat je daartussen al kunt switchen en dat aan de hand van de gebruikersnaam dus team en aantal goals veranderd. En dat je bij team dus kunt switchen tussen de verschillende teams en dat het aantal goals dan meeveranderd.)
Hopelijk begrijpen jullie dit zo een beetje, en kunnen jullie mij wat verder op de goede weg brengen.
Groeten!
Niemand die mij hier wat verder mee op weg kan helpen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<select id="team" name="team" onchange="showGoals(this.value)">
<option value="4">Bal Op Het Dak</option>
<option value="2">Bal In De Sloot</option>
</select>
<span id="goals">4<span> goals
<script type="text/javascript">
function showGoals(g) {
document.getElementById("goals").innerHTML = g;
}
</script>
<option value="4">Bal Op Het Dak</option>
<option value="2">Bal In De Sloot</option>
</select>
<span id="goals">4<span> goals
<script type="text/javascript">
function showGoals(g) {
document.getElementById("goals").innerHTML = g;
}
</script>
Gewijzigd op 18/08/2014 12:16:15 door Ger van Steenderen