Cijfers uit mysql in de juiste html tabel krijgen
Vervang regel 28-41 door het volgende:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$rasAantallen = array();
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res)) {
$rasAantallen[$row['ras1']][$row['m']] = $row['s'];
}
?>
$rasAantallen = array();
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res)) {
$rasAantallen[$row['ras1']][$row['m']] = $row['s'];
}
?>
Ook doe je er verstandig aan over te schakelen naar MySQLi of PDO. De MySQL-extensie is al 10 jaar verouderd.
Met die select case gaat het ook nog niet goed. Hier zitten we nog met een fout.
ras1 is niet correct in weergave denk ik.
Ik maak via de query een link met de ras id die dan weer overeenkomt met diegene in de array rassen maar dat is misschien ook simpeler op te lossen.
Mijn resultaat van de array is:
Maar 1 resultaat alhoewel er meerdere zijn en de SUM(aantal) en maand weergave is helemaal niet juist.
En ja, ik moet dringend eens PDO leren. Ik ben blijven 'hangen' in de oude mysql notatie.
Gewijzigd op 26/06/2015 16:00:01 door Brecht S
Gebruik anders voor nu gewoon de rasnaam.
Toevoeging op 26/06/2015 18:14:10:
Dit is hetgeen ik nu heb, maar totaal onjuist van cijfers:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$sql2 = "
SELECT
m.month_no,
d.ras,
SUM(d.aantal)
FROM
(SELECT 1 as month_no UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION
SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
) m
LEFT JOIN
wedstrijd d
ON
m.month_no = MONTH(d.datum)
GROUP BY
d.ras, m.month_no
";
$rasAantallen = array();
$res2 = mysql_query($sql2) or die (mysql_error());
while($row = mysql_fetch_assoc($res2)) {
$rasAantallen[$row['ras']][$row['month_no']] = $row['SUM(d.aantal)'];
}
SELECT
m.month_no,
d.ras,
SUM(d.aantal)
FROM
(SELECT 1 as month_no UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION
SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
) m
LEFT JOIN
wedstrijd d
ON
m.month_no = MONTH(d.datum)
GROUP BY
d.ras, m.month_no
";
$rasAantallen = array();
$res2 = mysql_query($sql2) or die (mysql_error());
while($row = mysql_fetch_assoc($res2)) {
$rasAantallen[$row['ras']][$row['month_no']] = $row['SUM(d.aantal)'];
}
De array ziet er als volgt uit:
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
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
Array
(
[] => Array
(
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[6] => 1
)
[aubrac] => Array
(
[6] => 4
[7] => 1
)
[black aberdeen] => Array
(
[6] => 3
)
[chianina] => Array
(
[6] => 2
)
[holsteiner] => Array
(
[6] => 1
)
[piemontese] => Array
(
[6] => 2
)
[rubia gallega] => Array
(
[6] => 3
)
[simmental] => Array
(
[6] => 8
)
[wagyu kobe] => Array
(
[6] => 1
)
[west vlaams rood] => Array
(
[6] => 2
)
[wit-blauw] => Array
(
[6] => 2
)
)
(
[] => Array
(
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[6] => 1
)
[aubrac] => Array
(
[6] => 4
[7] => 1
)
[black aberdeen] => Array
(
[6] => 3
)
[chianina] => Array
(
[6] => 2
)
[holsteiner] => Array
(
[6] => 1
)
[piemontese] => Array
(
[6] => 2
)
[rubia gallega] => Array
(
[6] => 3
)
[simmental] => Array
(
[6] => 8
)
[wagyu kobe] => Array
(
[6] => 1
)
[west vlaams rood] => Array
(
[6] => 2
)
[wit-blauw] => Array
(
[6] => 2
)
)
Volledig fout dus. De database heeft onderstaande gegevens:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
Ras Maand Aantal
aubrac 7 1
aubrac 6 1
simmental 6 4
black aberdeen 6 2
west vlaams rood 6 2
aubrac 7 1
aubrac 6 1
simmental 6 4
black aberdeen 6 2
west vlaams rood 6 2
Gewijzigd op 26/06/2015 18:21:11 door Brecht S
Niet alle maanden hebben resultaten... Dat ondervang ik door mijn for-loops in PHP, ik loop alle rassen en maanden af ongeacht of hier (ras in een maand) resultaten voor zijn of niet.
De query kan volgens mij vereenvoudigd worden. Toon de exacte records van je wedstrijd-tabel eens. Als ik bovenstaand fragment mag geloven zijn dat 10 records. Die tabel bevat toch alle informatie die je nodig hebt? Meer hulpstukken heb je in combinatie met de rest van mijn code niet nodig.
Alleen zie ik de koppeling niet met de array rassen... Daar zit mijn probleem.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
m.month_no,
r.ras,
IFNULL(SUM(d.aantal), 0) aantal
FROM
(SELECT 1 as month_no UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION
SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
) m
CROSS JOIN
(SELECT DISTINCT ras FROM wedstrijd) r
LEFT JOIN
wedstrijd d
ON m.month_no = MONTH(d.datum) AND r.ras = d.ras
GROUP BY r.ras, m.month_no
m.month_no,
r.ras,
IFNULL(SUM(d.aantal), 0) aantal
FROM
(SELECT 1 as month_no UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION
SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
) m
CROSS JOIN
(SELECT DISTINCT ras FROM wedstrijd) r
LEFT JOIN
wedstrijd d
ON m.month_no = MONTH(d.datum) AND r.ras = d.ras
GROUP BY r.ras, m.month_no
I rest my case
Gewijzigd op 26/06/2015 20:27:59 door Ger van Steenderen
Dit geeft een foutmelding omdat m.ras en d.month_no niet bestaat.
Kan ik dit verwerken in de bovenstaande array?
Mja, en als je alle bezoekers van je site die de informatie willen zien een MySQL-console aanbiedt waarbij deze query automatisch wordt uitgevoerd en het resultaat getoond wordt dan zal men wellicht content zijn.
Maar enkel met een query ben je er nog niet. De topicstarter geeft aan dat deze niet precies ziet hoe deze van een query tot een HTML-tabel kan komen. Jij geeft enkel een query.
Ondanks dat het wellicht een nette query is heb je er weinig aan als men hiermee het probleem niet opgelost krijgt.
Quote:
Dit zijn inderdaad 10 records, weliswaar gegroepeerd.
Daar vraag ik om, wat zie je als je simpelweg de query "SELECT * FROM wedstrijd" uitvoert.
Laten we dat even als vertrekpunt nemen.
2015-06-26-west vlaams rood-1
2015-06-26-aubrac-1
2015-06-26-wit-blauw-1
2015-06-26-chianina-1
2015-06-26-black aberdeen-1
2015-06-26-rubia gallega-1
2015-06-26-piemontese-1
2015-06-26-rubia gallega-1
2015-06-26-holsteiner-1
2015-06-26-simmental-1
2015-06-26-simmental-1
2015-06-26-aubrac-1
2015-06-26-aubrac-1
2015-06-26-rubia gallega-1
2015-06-26-west vlaams rood-1
2015-06-26-piemontese-1
2015-06-26-west vlaams rood-1
2015-06-26-wit-blauw-1
Gewijzigd op 26/06/2015 21:03:37 door Brecht S
Thomas van den Heuvel op 26/06/2015 20:38:39:
Maar enkel met een query ben je er nog niet. De topicstarter geeft aan dat deze niet precies ziet hoe deze van een query tot een HTML-tabel kan komen. Jij geeft enkel een query.
Enigszins kortzichtig, de TS is met jouw zogenaamde praktische oplossing ook geen steek verder gekomen.
Toch alleen omdat die bras van jou er nog in zat. Die probeer ik er nu ook uit te werken, omdat de TS geen drol van je maaksels snapt en gewoon iets werkends wil.
De enige reacties die ik van jou voorbij zie komen zijn SQL statements, en verder bar weinig.
Wat je aanlevert is in dit geval compleet onbruikbaar.
Fijn dat jij voor jezelf alle problemen met 1 query op kunt lossen, maar ik kijk wat verder dan mijn neus lang is.
Toevoeging op 27/06/2015 10:23:09:
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
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
<?php
$res = mysql_query(
'SELECT ras, MONTH(datum) AS maand, SUM(aantal) AS totaal
FROM wedstrijd
GROUP BY ras, maand
ORDER BY ras'
) or die(mysql_error());
$rassen = array();
$rasAantallen = array();
while ($row = mysql_fetch_assoc($res)) {
// houd bij welke verschillende rassen je tegenkomt
// het zou beter zijn als je een aparte ras-tabel had, zodat je aan een ras-id kunt refereren
$rassen[$row['ras']] = true;
$rasAantallen[$row['ras']][$row['maand']] = $row['totaal'];
}
$maanden = array(1 => 'Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec');
// bouw je tabel
?><table border="1">
<thead>
<tr>
<th>Ras</th><?php
foreach ($maanden as $label) {
?><th><?php echo $label ?></th><?php
}
?></tr>
</thead>
<tbody><?php
// doorloop alle rassen
foreach ($rassen as $rasNaam => $dummy) {
?><tr>
<td><?php echo $rasNaam ?></td><?php
// doorloop voor elk ras alle maanden
foreach ($maanden as $maandNr => $maandLabel) {
// als er voor dit ras en deze maand een aantal is, druk deze af, druk anders een spatie af
if (isset($rasAantallen[$rasNaam][$maandNr])) {
?><td><?php echo $rasAantallen[$rasNaam][$maandNr] ?></td><?php
} else {
?><td> </td><?php
}
}
?></tr><?php
}
?></tbody>
</table>
$res = mysql_query(
'SELECT ras, MONTH(datum) AS maand, SUM(aantal) AS totaal
FROM wedstrijd
GROUP BY ras, maand
ORDER BY ras'
) or die(mysql_error());
$rassen = array();
$rasAantallen = array();
while ($row = mysql_fetch_assoc($res)) {
// houd bij welke verschillende rassen je tegenkomt
// het zou beter zijn als je een aparte ras-tabel had, zodat je aan een ras-id kunt refereren
$rassen[$row['ras']] = true;
$rasAantallen[$row['ras']][$row['maand']] = $row['totaal'];
}
$maanden = array(1 => 'Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec');
// bouw je tabel
?><table border="1">
<thead>
<tr>
<th>Ras</th><?php
foreach ($maanden as $label) {
?><th><?php echo $label ?></th><?php
}
?></tr>
</thead>
<tbody><?php
// doorloop alle rassen
foreach ($rassen as $rasNaam => $dummy) {
?><tr>
<td><?php echo $rasNaam ?></td><?php
// doorloop voor elk ras alle maanden
foreach ($maanden as $maandNr => $maandLabel) {
// als er voor dit ras en deze maand een aantal is, druk deze af, druk anders een spatie af
if (isset($rasAantallen[$rasNaam][$maandNr])) {
?><td><?php echo $rasAantallen[$rasNaam][$maandNr] ?></td><?php
} else {
?><td> </td><?php
}
}
?></tr><?php
}
?></tbody>
</table>
You're welcome.
Gewijzigd op 27/06/2015 10:29:26 door Thomas van den Heuvel
@Thomas: werkt perfect. Hartelijk dank hiervoor. Ik heb het wel nog wat aangepast maar de basis was er wel.