28. december 2016 - 21:33Der 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.
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?
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).
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 %.
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?
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;");
Synes godt om
Ny brugerNybegynder
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.