Ik heb een array met een aantal gegevens. De belangrijkste zijn 'answer' en 'datum' (ja ik weet het, engels en nl door elkaar).

Hier een voorbeeld:


Array
(
    [0] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 932
            [cid] => 202
            [answer] => ok
        )

    [1] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 930
            [cid] => 202
            [answer] => ok
        )

    [2] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 928
            [cid] => 202
            [answer] => ok
        )

    [3] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 926
            [cid] => 202
            [answer] => ok
        )

    [4] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 924
            [cid] => 202
            [answer] => ok
        )

    [5] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 922
            [cid] => 202
            [answer] => ok
        )

    [6] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 920
            [cid] => 202
            [answer] => ok
        )

    [7] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 918
            [cid] => 202
            [answer] => fout
        )

    [8] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 916
            [cid] => 202
            [answer] => ok
        )

    [9] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1192
            [cid] => 230
            [answer] => ok
        )

    [10] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1191
            [cid] => 230
            [answer] => ok
        )

    [11] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1190
            [cid] => 230
            [answer] => fout
        )

    [12] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1189
            [cid] => 230
            [answer] => ok
        )

    [13] => Array
        (
            [infoid] => 235
            [company_id] => 57
            [datum] => 2019
            [tid] => 329
            [catid] => 229
            [info_id] => 235
            [questionid] => 1187
            [cid] => 229
            [answer] => ok
        )

    [14] => Array
        (
            [infoid] => 235
            [company_id] => 57
            [datum] => 2019
            [tid] => 329
            [catid] => 228
            [info_id] => 235
            [questionid] => 1186
            [cid] => 228
            [answer] => ok
        )

    [15] => Array
        (
            [infoid] => 235
            [company_id] => 57
            [datum] => 2019
            [tid] => 329
            [catid] => 228
            [info_id] => 235
            [questionid] => 1185
            [cid] => 228
            [answer] => ok
        )

    [16] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1188
            [cid] => 230
            [answer] => ok
        )

    [17] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 934
            [cid] => 202
            [answer] => ok
        )

    [18] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 936
            [cid] => 202
            [answer] => ok
        )

    [19] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 938
            [cid] => 202
            [answer] => ok
        )

    [20] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 940
            [cid] => 202
            [answer] => ok
        )

    [21] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 942
            [cid] => 202
            [answer] => ok
        )

    [22] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 944
            [cid] => 202
            [answer] => ok
        )

    [23] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 946
            [cid] => 202
            [answer] => ok
        )

    [24] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 948
            [cid] => 202
            [answer] => ok
        )

    [25] => Array
        (
            [infoid] => 235
            [company_id] => 57
            [datum] => 2019
            [tid] => 329
            [catid] => 228
            [info_id] => 235
            [questionid] => 1184
            [cid] => 228
            [answer] => ok
        )

    [26] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1154
            [cid] => 220
            [answer] => ok
        )

    [27] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1153
            [cid] => 220
            [answer] => ok
        )

    [28] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1152
            [cid] => 220
            [answer] => ok
        )

    [29] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1151
            [cid] => 220
            [answer] => ok
        )

    [30] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1150
            [cid] => 220
            [answer] => ok
        )

    [31] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1149
            [cid] => 220
            [answer] => ok
        )

    [32] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1147
            [cid] => 220
            [answer] => ok
        )

    [33] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1148
            [cid] => 220
            [answer] => fout
        )

    [34] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1145
            [cid] => 220
            [answer] => ok
        )

    [35] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1146
            [cid] => 220
            [answer] => ok
        )

    [36] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1144
            [cid] => 220
            [answer] => ok
        )

    [37] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1143
            [cid] => 220
            [answer] => ok
        )

    [38] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1142
            [cid] => 220
            [answer] => ok
        )

    [39] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1140
            [cid] => 220
            [answer] => ok
        )

    [40] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1141
            [cid] => 220
            [answer] => ok
        )

    [41] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1139
            [cid] => 220
            [answer] => ok
        )

    [42] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1138
            [cid] => 220
            [answer] => ok
        )

)


Ik wil uiteindelijk in een tabel of overzicht hebben hoeveel answers er fout zijn per jaar. In dit geval zijn er twee jaartallen in de array 2019 en 2020.

Hoe kan ik ophalen hoeveel het answer 'fout' is per jaar? Bijvoorbeeld: 2019 - 5 fout, 2020 - 0 fout


Dit is nu mijn php:

<?PHP
//Select wpi according to template chosen
$getwpi = '
SELECT info.id as infoid, info.company_id, info.datum, info.tid, categorie.id as catid, categorie.info_id, question.id as questionid, question.cid, question.answer
FROM wpi_info info
INNER JOIN wpi_categories categorie
ON info.id = categorie.info_id
INNER JOIN wpi_questions question
ON question.cid = categorie.id
WHERE info.company_id = "'.$conn->real_escape_string($getcompany['id']).'"';
$getwpicon = $conn->query($getwpi);

while($getwpi = $getwpicon->fetch_assoc()){
$year = date('Y', strtotime($getwpi['datum'])); // only show year
$getwpi['datum'] = $year; // update your field
$wpi[] = $getwpi; // add to the result array
}

echo '<pre>';
print_r($wpi);
echo '</pre>';
?>
Je hebt dus alles in een database staan, gaat het vervolgens in een array zetten en wilt het dan tellen?

Waarom niet direct in de database tellen?
Of tijdens het ophalen meteen een lijstje bijhouden:

//ergens bovenaan
$year_count = [];

//in je while loop, nadat je $year bepaald hebt
if($getwpi['answer'] == 'fout') $year_count[$year] = ($year_count[$year] ?? 0) + 1;

//tadaa
print_r($year_count);

SELECT 
      info.datum, 
      SUM(question.answer = 'fout') as foutteller,
      SUM(question.answer = 'goed') as goedteller

FROM wpi_info info
INNER JOIN wpi_categories categorie ON info.id = categorie.info_id
INNER JOIN wpi_questions question ON question.cid = categorie.id
WHERE info.company_id = '123'
GROUP BY info.datum


Dit geeft je direct het antwoord. Waarschijnlijk een stuk eenvoudiger tellen dat zelf met PHP weer door je array lussen of bij het bouwen van het array bijhouden.

als bonus ook een teller voor de goede antwoorden
Je zou ook gewoon alles kunnen groeperen op answer? Maar misschien gebruikt @Jaap die data nog voor andere dingen, dan heeft 'ie nog steeds alle resultaten nodig.

Reageren