Goedemiddag,

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.

<?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>";
}
?>

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
Ja, maar als je niet expliciet een volgorde opslaat is het volgens mij niet 100% gegarandeerd dat de eerste keuze vooraan staat, dan de twee et cetera. Hier vervolgens een "gewicht" aanhangen kan altijd nog, eventueel via code. Als de volgorde een rol speelt bij de berekening, lijkt het mij wel zaak om deze op te slaan, tenzij je hier aparte kolommen voor hebt aangemaakt ofzo (maar dat is dan vanuit ontwerpoptiek misschien weer niet optimaal). Oftwel: het is hierbij dus belangrijk dat je op een expliciete manier "stem 1", "stem 2" en "stem 3" kunt identificeren.
Hallo Thomas,
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?
Ah dus meta_key 8 is voor de eerste stem, 16 voor de tweede et cetera. Nou, als je dan de meta_key ook ophaalt dan weet je dus precies met welk gewicht je de stem moet vermenigvuldigen, dus zorg dat je die ook opvraagt in je query en dan heb je alle informatie om te gaan rekenen. De meta_key bepaalt dus de vermenigvuldigingsfactor, wat deze factor precies is doet er niet echt toe, maar je hebt die meta_key dus wel nodig om te weten waarmee je moet vermenigvuldigen.

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?
Hallo Thomas,
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
Iemand die ons kan helpen met het optimaliseren van deze code?
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.

Reageren