Waarde toekennen aan ingevulde gegevens

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jeroen Rooij

Jeroen Rooij

06/12/2018 17:02:53
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
 
PHP hulp

PHP hulp

27/11/2024 09:15:33
 
Thomas van den Heuvel

Thomas van den Heuvel

06/12/2018 17:45:56
Quote Anchor link
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.
Gewijzigd op 06/12/2018 17:48:03 door Thomas van den Heuvel
 
Jeroen Rooij

Jeroen Rooij

07/12/2018 13:50:02
Quote Anchor link
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?
 
Thomas van den Heuvel

Thomas van den Heuvel

07/12/2018 15:47:45
Quote Anchor link
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?
Gewijzigd op 07/12/2018 15:51:54 door Thomas van den Heuvel
 
Jeroen Rooij

Jeroen Rooij

09/12/2018 19:34:07
Quote Anchor link
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
 
Jeroen Rooij

Jeroen Rooij

18/12/2018 15:26:58
Quote Anchor link
Iemand die ons kan helpen met het optimaliseren van deze code?
Zelf kom ik er helaas niet uit.
Alvast bedankt
Jeroen
 
Thomas van den Heuvel

Thomas van den Heuvel

18/12/2018 22:25:42
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.