Avatar billede kmc81 Juniormester
28. december 2016 - 21:33 Der er 8 kommentarer og
1 løsning

sammenligne tabeller, udregn, lav ny liste

Hej

Det her er nok til de lidt mere erfarne.
Jeg skal have lavet en liste der viser: Vindernavn (winner_name), Indskud (quiz_cost), gevinst (ikke defineret).
Udfordringen ligger i at der skal hentes fra to tabeller (quiz_reward, quiz_winner) og udregnes hvor meget vinderne har vundet.

Tabellerne ser således ud:

"quiz_reward" indeholder info om hvor mange deltagere der er i en quiz og hvor meget gevinsten er på. Her er felterne: id, quiz_id, quiz_cost, reward_amount, total_participants.
Tabellen "quiz_winner" indeholder hver enkelt vinder. Der kan godt være flere vindere i hver quiz. Her er felterne: winner_name, quiz_id, purchased_kr (indeholder det beløb deltageren havde på sin konto efter han har købt sig ind i quizzen), reward_id, reward_percentage, quiz_cost
Så det der skal vises er felterne: <winner_name> <quiz_cost> fra tabellen "quiz_winner" og gevinst (som ikke har et felt). 

Jeg tænker at man for at finde ud af en deltagers gevinst skal hente rækken (fra quiz_reward) med id der matcher reward_id (fra quiz_winner) og så finde værdien af feltet 'quiz_reward'. Herefter skal man så gange reward_percentage (fra quiz_winner) med quiz_reward for at få den enkelte vinders gevinst

Men udfordringen er nok at få samlet data i en ny liste med det ekstra felt "gevinst" (som indeholder den enkelte vinders gevinst) og skrevet den ud.

Jeg håber det er til at det er forklaret så det er til at forstå og at det kan lade sig gøre.

Med Venlig Hilsen

Kenneth
Avatar billede michael_stim Ekspert
28. december 2016 - 21:41 #1
Det er ikke så problematisk, men ser dog et problem. Du skal först og fremmest bruge en join og så en group by på navn, MEN hvad hvis to deltagere har samme navn?
Avatar billede kmc81 Juniormester
28. december 2016 - 21:48 #2
Ups. Glemte at tilføje feltet: "winner_id" i tabellen "quiz_winner", som indeholder brugerens id.. :-)
Avatar billede kmc81 Juniormester
28. december 2016 - 21:52 #3
Er ikke lige helt klar over hvordan join fungere, men prøver lige at læse op på det, men group by på navn, det samler vel blot alle rækker med samme navn. Det skal den helst ikke, for man den samme deltager kan sagtens stå listet flere gange (i forskellige quiz).
Avatar billede michael_stim Ekspert
28. december 2016 - 21:57 #4
Du vil vel have en samlet sum, eller?

Erik -> 10
Mads -> 5
Henrik -> 10
Erik -> 5
Henrik -> 10

Bliver:

Henrik -> 20
Erik -> 15
Mads -> 5

Eller har jeg misforstået?
Avatar billede kmc81 Juniormester
28. december 2016 - 22:25 #5
Kan godt se at det er forvirrende den er også lidt kringlet og årsagen til at jeg ikke bare laver tabellen om er, at det er lavet af en anden udvikler og er sammenkædet med en app, så det er mere omfattende.. Anyway.
Sagen er den, at jeg skal have lavet en liste med alle vindere i nuværende år og i den liste skal der stå: vindernavn    indskud    og    gevinst..  De to første (vindernavn og indskud) er nemme nok at få frem, da det er fra samme liste, men den eneste måde jeg kan udregne gevinst på er, at finde ud af hvor meget den samlede gevinst er på (reward_amount i tabellen "quiz_reward") i den pågældende quiz og gange det med vinderens (reward_percentage). Men der kan sagtens være flere vindere i hver quiz. Nr. 1 har måske 80 % reward_percentage og nr.2,3,4,5 har 5 %.
Avatar billede kmc81 Juniormester
28. december 2016 - 22:29 #6
Men jeg tror at InnerJoin er løsningen til at få reward_percentage ud sammen med vinderen ved at bruge 'id' og 'reward_id' som ref.. Men kan jeg godt lave en udregning til gevinst inden i en foreach eksempelvis?
Avatar billede michael_stim Ekspert
28. december 2016 - 22:34 #7
Jeg kan ikke rigtigt gennemskue hvad du vil, men kan da hjälpe dig lidt på vej:

SELECT qw.winnwe_name, qw_purchased_kr, qr.reward_amount FROM quiz_winner qr LEFT JOIN quiz_reward qr ON qw.quiz_id = qr.quiz_id

Er sikkert ikke sådan du vil have det, men noget á la det.
Avatar billede kmc81 Juniormester
28. december 2016 - 22:59 #8
Tak for det. Jeg sidder lige og kigger på det og prøver tingene af.  Jeg giver en opdatering på hvordan det går senere eller i morgen.
Avatar billede kmc81 Juniormester
29. december 2016 - 01:00 #9
Tak for hjælpen på vej. :-)  Jeg brugte dette som løsning:

$results = $pdo->query("SELECT quiz_winner.winner_name, quiz_winner.quiz_id, quiz_winner.reward_id, quiz_winner.reward_percentage, quiz_winner.quiz_cost, quiz_reward.reward_amount,
(SELECT SUM(quiz_winner.reward_percentage * quiz_reward.reward_amount / 100) FROM quiz_reward WHERE quiz_reward.id = quiz_winner.reward_id ) AS gevinst
FROM quiz_winner JOIN quiz_reward ON quiz_winner.reward_id = quiz_reward.id;");
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester