Cijfers uit mysql in de juiste html tabel krijgen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Thomas van den Heuvel

Thomas van den Heuvel

26/06/2015 14:27:42
Quote Anchor link
Mja je overschrijft ook elke keer het hele array.

Vervang regel 28-41 door het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'];
}

?>

Ook doe je er verstandig aan over te schakelen naar MySQLi of PDO. De MySQL-extensie is al 10 jaar verouderd.
 
PHP hulp

PHP hulp

13/05/2024 22:10:09
 
Brecht S

Brecht S

26/06/2015 15:34:16
Quote Anchor link
Ha ja inderdaad.
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
Array
(
    [1] => Array
        (
            [7] => 17
        )

)

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
 
Thomas van den Heuvel

Thomas van den Heuvel

26/06/2015 16:41:14
Quote Anchor link
Gebruik anders voor nu gewoon de rasnaam.
 
Brecht S

Brecht S

26/06/2015 16:48:45
Quote Anchor link
Dan is die toch helemaal niet meer gekoppeld met de rassen array geheel bovenaan de code? Ik begrijp er niks meer van.

Toevoeging op 26/06/2015 18:14:10:

Dit is hetgeen ik nu heb, maar totaal onjuist van cijfers:
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
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)'];
}


De array ziet er als volgt uit:
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
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
        )

)

Volledig fout dus. De database heeft onderstaande gegevens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 26/06/2015 18:21:11 door Brecht S
 
Thomas van den Heuvel

Thomas van den Heuvel

26/06/2015 19:28:24
Quote Anchor link
Je doet ook een LEFT JOIN op een soort van maanden-dummy-tabel.

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.
 
Brecht S

Brecht S

26/06/2015 19:36:27
Quote Anchor link
Dit zijn inderdaad 10 records, weliswaar gegroepeerd.
Alleen zie ik de koppeling niet met de array rassen... Daar zit mijn probleem.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

26/06/2015 20:23:25
Quote Anchor link
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
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

I rest my case
Gewijzigd op 26/06/2015 20:27:59 door Ger van Steenderen
 
Brecht S

Brecht S

26/06/2015 20:34:44
Quote Anchor link
Waarom deze keuzen? GROUP BY m.ras, d.month_no
Dit geeft een foutmelding omdat m.ras en d.month_no niet bestaat.
Kan ik dit verwerken in de bovenstaande array?
 
Thomas van den Heuvel

Thomas van den Heuvel

26/06/2015 20:38:39
Quote Anchor link
@Ger

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.
 
Brecht S

Brecht S

26/06/2015 21:02:59
Quote Anchor link
Even kort uitgelezen. De 1'tjes zijn de aantallen die worden samengeteld per ras:

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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

26/06/2015 21:24:20
Quote Anchor link
@Thomas
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

26/06/2015 23:12:56
Quote Anchor link
@Ger

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>&nbsp;</td><?php
            }
        }

        ?>
</tr><?php
    }
    ?>
</tbody>
</table>

You're welcome.
Gewijzigd op 27/06/2015 10:29:26 door Thomas van den Heuvel
 
Brecht S

Brecht S

28/06/2015 13:06:31
Quote Anchor link
@Thomas: werkt perfect. Hartelijk dank hiervoor. Ik heb het wel nog wat aangepast maar de basis was er wel.
 

Pagina: « vorige 1 2



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.