Avatar billede superbent Nybegynder
30. september 2007 - 11:41 Der er 9 kommentarer og
1 løsning

Hjælp til join af et par tabeller

Hejsa,

Jeg har ikke vitterligt styr på MySQL's joins m.v. og derfor håber jeg lidt at i kan hjælpe mig.

Jeg har et point system, hvor at brugere får tildelt nogen point.

Det bliver gemt i 2 tabeller.

konkurrence (konkurrence og den der vinder får point)
id | user_id |

point (her gemmes hver gang man får point, med dato osv.)
id | user_id | point |

Jeg kan jo sagtens som jeg har gjort nu, lave en while($row = mysql_fetch_array($get)) og køre users igennem og hive point ud og udskrive dem.

Men jeg vil gerne i den while/query selecte, således at jeg kan udskrive efter flest point, så den der har flest point har 1 pladsen, og næste 2. pladsen, osv.

Er det noget nogen vil være mig behjælpelig med.

På forhånd tak
Avatar billede sherlock Nybegynder
30. september 2007 - 11:50 #1
Jeg går ud fra at hver person tildeles et nyt user_id i hver konkurrence. Ellers skal der også konkurrence_id på point-tabellen. I din model er der jo ellers ingen reference mellem en bestemt konkurrence og de opnåede point.

select p.user_id, sum(p.point)
from point p, konkurrence k
where k.id = 1 (erstat med konkurrence.id)
  and k.user_id = p.user_id
group by p.user_id
Avatar billede superbent Nybegynder
30. september 2007 - 11:52 #2
Hov jo, jeg har i point tabellen en: konkurrence_id også
Avatar billede superbent Nybegynder
30. september 2007 - 12:02 #3
Må lige huske at sige at den skal regne alle points sammen uafhængig af konkurrence, altså at det er "overall" rating kan man kalde det.
Avatar billede superbent Nybegynder
30. september 2007 - 12:13 #4
Når jeg prøver at teste din query, og jeg har med en bestemt person følgende værdier(point):
10,10,20,13,6

Så lægger den dem sammen til 295

og en anden som har point:
10,20

Lægger den sammen til 60.

Nogen idé til hvorfor resultatet regnes lidt sjovt ud? :)
Avatar billede sherlock Nybegynder
30. september 2007 - 13:04 #5
Der er fordi der bliver flere joins, som hver indeholder allepointene, når konkurrence_id ikke er med i where-clausen.

select p.user_id, sum(p.point)
from point p, konkurrence k
where k.id = 1 (erstat med konkurrence.id)
  and k.user_id = p.user_id
  and k.konkurrence_id = p.konkurrence_id
group by p.user_id
Avatar billede superbent Nybegynder
30. september 2007 - 13:06 #6
Hov jeg skrev forkert før, det var:
10,20,13,6

Som den regner ud til: 236 af en eller anden sjov grund...
Avatar billede superbent Nybegynder
30. september 2007 - 13:09 #7
Alle point i alt i tabellen med point giver: 122 så den regner ikke alle sammen i alt.
Avatar billede sherlock Nybegynder
30. september 2007 - 13:18 #8
Prøv at sende mig tabellerne på jkp at eanet dot dk
Avatar billede superbent Nybegynder
30. september 2007 - 13:25 #9
Det ser ud til at den er i vinkel nu, jeg manglede en AND i query...

Tror den er som den skal være, ellers vender jeg frygteligt tilbage :)

Tak for hjælpen sherlock.

Vil du venligst lægge et svar.
Avatar billede sherlock Nybegynder
30. september 2007 - 13:31 #10
Ok :)
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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