POLL 1: REACTIE mogelijkheid 1 t/m 3
POLL 2: REACTIE mogelijkheid 1 t/m 3
POLL 3: REACTIE mogelijkheid 1 t/m 6

tabel met de reacties (op naam): 
+-------+-------+---------+
| NAAM  | POLL | REACTIE  |
+-------+-------+---------+
| Jan   | 1     | 3       |        
| Jan   | 2     | 2       | 
| Jan   | 3     | 6       |
| Piet  | 1     | 3       |
| Piet  | 2     | 1       | 
| Piet  | 3     | 2       |
| Klaas | 1     | 1       |
| Klaas | 2     | 2       |
| Klaas | 3     | 6       |
+-------+-------+---------+


Zo wil ik de uitkomst van de poll:

+------+---------------+-----------------+
| POLL | MOGELIJKHEDEN | AANTAL REACTIES |
|  1   |      1        |       1         |
|      |      2        |       0         |
|      |      3        |       2         |
|      |               |                 |
|  2   |      1        |       1         |
|      |      2        |       2         |  
|      |      3        |       0         |
|      |               |                 | 
|  3   |      1        |       0         |           
|      |      2        |       1         |
|      |      3        |       0         |
|      |      4        |       0         |
|      |      5        |       0         |
|      |      6        |       2         |
+------+---------------+-----------------+ 


De vraag is dus hoe vaak een reactie (= waarde) wordt gegeven per mogelijkheid per poll.
Wie kan mij verder stuk op weg helpen? Ik heb al een begin met alleen waarde 1 als reactie mogelijkheid. Deze moet dus doorgaan t/m 6.



<?php
$query = mysqli_query($con,"SELECT poll, SUM(IF(reactie = '1', 1,0)) AS `reactie_1`, COUNT(reactie) AS `totaal` FROM tabel GROUP BY poll ORDER BY poll");
while($row = mysqli_fetch_array($query)) {
    echo "In pol: ". $row['poll']. " komt de waarde 1 maar ". $row['reactie_1'] . "x voor";
    echo "<br />";
}
?>

Tabel 
184_meerkeuze_antwoorden
-> antwoord_id
-> deelnemer_id
-> vraag_nummer
-> antwoord_meerkeuze

Tabel
184_vragen_opties
-> vraag_id
-> vraag_poll
-> vraag_mogelijkheid


[size=xsmall]Toevoeging op 25/04/2016 11:36:32:[/size]

De uitslag is goed nu. Pfff. Straks verder met een duidelijker opmaak... en de percentages nog.


110
120
130
212
220
230
311
320
330
340
350
360


[size=xsmall]Toevoeging op 25/04/2016 11:46:46:[/size]


...
360
370
381
390
3100


Alleen raar dat de waarde onderaan (3100) mij niets zegt.

[size=xsmall]Toevoeging op 25/04/2016 17:39:46:[/size]

Het werkt. Bedankt allemaal!

Alleen nog laatste vraag over die totalen voor Jan. Ik heb te maken met een array begrijp ik, hoe kan ik
een totaal berekenen per poll? Of moet er een nieuwe query komen?
Je kan 2 dingen doen.
Deze extra query:

SELECT vraag_nummer, COUNT(antwoord_meerkeuze) AS totaal_vragen
FROM 184_meerkeuze_antwoorden
GROUP BY vraag_nummer
ORDER BY vraag_nummer

geeft je resultaat met de totalen per vraag_nummer/poll. In jouw geval dus 3 rijen. Die kun je binnen while lus gebruiken om het totaal van elke vraag op te zoeken (totaal_vragen) en per antwoord de percentages te berekenen.

Je kunt deze query ook opnemen in je originele query (zie regel 4-6), bijv:

SELECT vraag_poll, vraag_mogelijkheid, COUNT(deelnemer_id) AS aantal, t.totaal_vragen
FROM 184_vragen_opties
LEFT OUTER JOIN 184_meerkeuze_antwoorden ON vraag_nummer=vraag_poll AND antwoord_meerkeuze=vraag_mogelijkheid
LEFT OUTER JOIN (SELECT vraag_nummer, COUNT(antwoord_meerkeuze) AS totaal_vragen
                 FROM 184_meerkeuze_antwoorden
                 GROUP BY vraag_nummer) AS t ON t.vraag_nummer=vraag_poll
GROUP BY vraag_poll, vraag_mogelijkheid
ORDER BY vraag_poll, vraag_mogelijkheid


Elke rij zal nu behalve de totalen per vraag_mogelijkheid ook een totaal per vraag hebben. Bijv.

1 1 0 0
1 2 0 0
1 3 0 0
2 1 2 2
2 2 0 2
2 3 0 2
3 1 1 1
3 2 0 1
3 3 0 1
3 4 0 1
3 5 0 1
3 6 0 1

(ik heb voor het overzicht maar een spatie tussen elke kolom gezet.)
Vraag 1 had nul antwoorden, vraag 2 2 antwoorden en vraag 3 1 antwoord.
Je kunt dan simpel de 3e kolom delen door de 4e kolom en vermenigvuldigen met 100.

Dat kun je zelfs ook nog in je query doen. Voeg dit achteraan aan je SELECT toe (op regel 1)

, COUNT(deelnemer_id)/t.totaal_vragen AS percentage

Evt met afronding naar 2 decimalen

, ROUND((COUNT(deelnemer_id)/t.totaal_vragen), 2) AS percentage


Ook hier geldt weer: niet getest, uit de losse pols ingetikt.
Als je tabellen niet te groot zijn is deze oplossing waarschijnlijk het handigst.
Beste Jan, super bedankt voor je tijd en hulp! Het werkt. Ik kan weer verder gelukkig. Ben blij dat je me zo goed en kundig hebt kunnen helpen. Knap werk!
Graag gedaan Jac E en fijn dat je geholpen bent.
Gotcha: als er nog niet gestemd is moet je wellicht waken voor het delen door 0.

Overigens, tenzij je een soort totaaloverzicht voor alle polls wilt creëren (voor een backend? een rapportage? iets anders?) zul je waarschijnlijk zelden tot nooit meerdere polls tegelijkertijd behandelen, maar meestal slechts één enkele poll tegelijkertijd bekijken.

En die enkele keer dat je zo'n overzicht genereert zou je wellicht gebruik kunnen maken van de reeds geschreven queries die zijn afgestemd voor "enkelvoudig" gebruik. Pas als je dit soort overzichten vaker/veelvuldig bekijkt of gebruikt kun je overwegen om aparte queries te schrijven om polls in bulk te behandelen.

Met andere woorden, misschien is het handig om eerst te kijken naar wat voor queries je nodig hebt om dingen met een enkele poll te doen, en dan pas te kijken of het dan nog nodig is om aparte queries te schrijven om meerdere polls tegelijkertijd te behandelen, of dat je, omdat je dit toch zelden of nooit doet, dan toch maar gebruik maakt van de reeds geschreven queries voor enkelvoudig gebruik. Minder efficiënt uiteraard, maar dit levert je wel tijdswinst op. Daarnaast, mocht je iets in de database-structuur wijzingen heeft dit mogelijk consequenties voor meer queries en bijbehorende code...

Reageren