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 />";
}
?>
Heb je ook een tabel waar de mogelijke antwoorden per poll in staan? Als je hem niet hebt is het misschien handig om te maken.
Bijvoorbeeld:

Tabel poll_opties
+------+---------------+
| POLL | MOGELIJKHEID  |
|  1   |      1        |
|  1   |      2        |
|  1   |      3        |
|  2   |      1        |
|  2   |      2        |
|  2   |      3        |
|  3   |      1        |
|  3   |      2        |
|  3   |      3        |
|  3   |      4        |
|  3   |      5        |
|  3   |      6        |
+------+---------------+


Dan zou deze sql kunnen:

SELECT poll_opties.poll, poll_opties.mogelijkheid, COUNT(naam)
FROM poll_opties
LEFT OUTER JOIN poll ON poll.poll=poll_opties.poll and poll.reactie=poll_opties.mogelijkheid
GROUP BY poll_opties.poll, poll_opties.mogelijkheid
ORDER BY poll_opties.poll, poll_opties.mogelijkheid
Beste Jan. Bedankt voor je hulp. Ik heb tabel "poll_opties" toegevoegd. Ik krijg helaas error "Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given".

Kan het ook zonder deze extra tabel? Ik vraag dit omdat ik al een tabel heb met hierin op naam de waarden. Genoeg info dan? Is alleen een soort loop van 1 t/m 6 misschien een oplossing (en groeperen op poll)? Dit omdat mijn werkend voorbeeld script alleen naar de reacties met waarden 1 kijkt en niet naar de rest.
Jac E op 25/04/2016 00:40:24

Beste Jan. Bedankt voor je hulp. Ik heb tabel "poll_opties" toegevoegd. Ik krijg helaas error "Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given".

Bij zo'n foutafhandeling mist er blijkbaar foutafhandeling op je mysqli_query.
Wat zegt mysqli_error() ? Je kan de query ook even in phpMyAdmin gooien.

Ariën, klopt. Heb de fout ontdekt... Ik krijg nu alleen:

11
12
13
21
22
23
31
32
33
34
35
36

Welke variabele is nu die aangeeft hoe vaak een reactie (= waarde) wordt gegeven per mogelijkheid per poll.
Hoe kan ik eventueel percentages uitrekenen per cijfer/waarde -> per poll.
Bijvoorbeeld:

Poll 1
mogelijkheid  -> percentage
1             -> 50%
2             -> 20%
3             -> 30%


@Jac E,
Laat de code eens zien zoals je die nu hebt, want zo te zien aan je resultaat krijg je nu alleen poll en de mogelijkheid. Dus zonder de teller.
Het kan best zijn dat er in mijn sql een foutje zat, want ik heb hem zo ingetikt en niet getest. Misschien zit het al in het gebruik van hoofdletters of niet voor de veldnamen. Zoals Ariën zegt, probeer het eens met phpMyAdmin

En ik zou zelf niet voortborduren op jouw aanpak. Kan wel maar is erg kwetsbaar voor wijzigingen.
Hey Jan. Ik zal je advies uiteraard volgen. Dank je voor het advies.
Hieronder het test scriptje. Heb wel andere namen voor de variabelen.

<?php
$query = mysqli_query($con,"
SELECT vraag_poll, vraag_mogelijkheid, COUNT(deelnemer_id)
FROM 184_vragen_opties
LEFT OUTER JOIN 184_meerkeuze_antwoorden ON vraag_nummer=vraag_poll and antwoord_meerkeuze=vraag_mogelijkheid
GROUP BY vraag_poll, vraag_mogelijkheid
ORDER BY vraag_poll, vraag_mogelijkheid
") or die (mysqli_error($con)); 

while($row = mysqli_fetch_array($query)) {
    echo $row['vraag_poll'];
    echo $row['vraag_mogelijkheid'];
    
    echo "<br />";
}
?>
Maar, welke error geeft MySQL nou precies naast je PHP-Warning?
Ik krijg geen foutmeldingen meer. Gelukkig.
Misschien nog even je tabel- en kolomnamen delen met ons nu je een tabel bijgemaakt hebt?
Je zult na regel 13 ook de 3e kolom (met daarin de count) ook moeten echoën.

Misschien is het daarom beter in plaats van "COUNT(deelnemer_id)" dit te gebruiken "COUNT(deelnemer_id) AS aantal".
Dan kun je simpelweg dit toevoegen na regel 13:

   echo $row['aantal'];


En als je percentages wilt, zul je eerste het totaal moeten bepalen en $row['aantal'] moeten delen door het totaal en vermenigvuldigen met 100.

Reageren