Waarde toekennen aan ingevulde gegevens
Ik heb een formulier waar bezoekers een top3 kunnen invoeren. Ik heb een scriptje gemaakt zodat ik een top10 kan maken van de ingevoerde nummers. Echter nu zou ik graag waardes toekennen aan de invoer (tijdens de uitvoer).
Oftewel
Iemand stemt als volgt:
Stem 1
Stem 2
Stem 3
Nu wil ik graag dat stem 1, 3 punten krijg, stem 2 2 punten en stem 3 1 punt.
Als de volgende dan als volgt stemt:
Stem 2
Stem 3
Stem 1
Dan staat Stem 2 met 5 punten bovenaan, Stem 1 heeft dan 4 punten en staat tweede en Stem 3 heeft 3 punten en staat derde.
Ik heb het volgende scriptje welke ik nu gebruik om de stemmen te tonen in een top10 lijst. Waarbij elke stem even waardevol is.
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
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
<?php
$gemeente = $_GET['gemeente'];
global $wpdb;
$results = $wpdb->get_results("SELECT location
, meta_value
, COUNT(*) as total
FROM wp_gf_entry_meta
INNER JOIN
(
SELECT entry_id -- subquery to find location for the song choices
, meta_value as location
FROM wp_gf_entry_meta
WHERE meta_key = 11
) loc USING (entry_id)
WHERE meta_key IN (8,16,20)
AND meta_value <> 'Selecteer uw lied!'
AND meta_value <> 'Zoek jouw nummer!'
AND location = '$gemeente ' -- remove this line for all locations
GROUP BY meta_value -- and remove location from ORDER and GROUP
ORDER BY total DESC
LIMIT 10");
if(!empty($results)) {
foreach($results as $r) {
echo '<ul class="top10list">';
echo '<li><i class="icon-0"></i>';
echo $r->meta_value;
echo '</li>';
echo '</ul>';
}
} else {
echo "<p>Er is nog geen stem uitgebracht. Zodra dit is gedaan wordt de top10 samengesteld.</p>";
}
?>
$gemeente = $_GET['gemeente'];
global $wpdb;
$results = $wpdb->get_results("SELECT location
, meta_value
, COUNT(*) as total
FROM wp_gf_entry_meta
INNER JOIN
(
SELECT entry_id -- subquery to find location for the song choices
, meta_value as location
FROM wp_gf_entry_meta
WHERE meta_key = 11
) loc USING (entry_id)
WHERE meta_key IN (8,16,20)
AND meta_value <> 'Selecteer uw lied!'
AND meta_value <> 'Zoek jouw nummer!'
AND location = '$gemeente ' -- remove this line for all locations
GROUP BY meta_value -- and remove location from ORDER and GROUP
ORDER BY total DESC
LIMIT 10");
if(!empty($results)) {
foreach($results as $r) {
echo '<ul class="top10list">';
echo '<li><i class="icon-0"></i>';
echo $r->meta_value;
echo '</li>';
echo '</ul>';
}
} else {
echo "<p>Er is nog geen stem uitgebracht. Zodra dit is gedaan wordt de top10 samengesteld.</p>";
}
?>
Is het mogelijk om bij de output die waardes toe te kennen, gaat in bovenstaande scriptje dus om de waardes in (8, 16 , 20)
Alvast bedankt voor jullie hulp
Jeroen
Gewijzigd op 06/12/2018 17:48:03 door Thomas van den Heuvel
In principe is 8 invoer 1, 16 invoer 2 en 20 invoer 3, dit is bij alles zo, dus in dat geval is dit altijd hetzelfde,
Krijgt invoer 8 dus 3 punten, invoer 16 , 2 punten en invoer 20 1 punt
Kunnen we dit zonder die waarde mee te geven in de database wel uithalen dmv bovenstaande php code aan te vullen?
Ik kan mij vergissen, maar nu lijk je alle waarden (meta_values?) op één hoop te gooien, dus nu weet je waarschijnlijk niet goed of als er ergens op gestemd is, of dit dan positie 1, 2 of 3 was? Dus waarschijnlijk moet je dit nog verder uitsplitsen in je GROUP BY. Als de meta_keys de vermenigvuldigingsfactor bepalen, dan lijkt het mij dat je een stem voor een specifieke nummer moet onderverdelen op meta_key, zodat je bijvoorbeeld het volgende deelresultaat krijgt:
er is 3 keer gestemd op nummer 12 op positie 1,
er is 1 keer gestemd op nummer 12 op positie 2,
er is 5 keer gestemd op nummer 12 op positie 3.
(in tegenstelling tot "er is 9 keer gestemd op nummer 12", want dit vertelt je niets over posities)
Pas als je die specifieke informatie hebt, kun je de eindscore voor nummer 12 berekenen (3x3 + 1x2 + 5x1). Anders kun je dit onderscheid tussen de stemmen en de bijbehorende gewichten niet maken?
Gewijzigd op 07/12/2018 15:51:54 door Thomas van den Heuvel
Uit je antwoordt proef ik dat het mogelijk is. Echter ik ga dit zelf niet voor elkaar krijgen ben ik bang.
Ik was al blij dat ik een top10 kreeg aan de hand van bovenstaande code.
In ieder geval bedankt voor je reactie.
Groetjes Jeroen
Zelf kom ik er helaas niet uit.
Alvast bedankt
Jeroen
Heb je toevallig een gedeeltelijke/relevant stukje datastrucuur en wat sample-data, dan kunnen we aan de hand daarvan waarschijnlijk wel een query breien die doet wat jij wilt.