28. marts 2006 - 01:43Der er
9 kommentarer og 1 løsning
problem med query der bruger 2 tabeller
Jeg har 2 tabeller: $votes og $users $users indeholder bl.a. userId, username, lastLogin $votes indeholder bl.a. voteOn, vote, voteFrom
Brugerne skal stemme på hinanden. Nå en bruger har stem indsættes stemmen i $votes (voteOn = brugeren(userId) der bliver stemt på og voteFrom = brugeren(userId) der stemte)
Nå en bruger har stemt skal der komme en ny bruger han kan stemme på. En bruger må ikke kunne stemme på den samme bruger flere gange - (ikke før brugeren har stemt på samtlige brugere)
Den stemmende brugers id er $myId
Det jeg gerne vil have er et query der: bruger tabellen $votes til at se hvor mange gange $myId har stemt på forskellige brugere, og derefter lister i $user ud fra hvor mange $myId har stemt på dem (og derefter hvornår de sidst har været logget ind)
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
sql = "select count(voteFrom) from votes where voteFrom = '".$myId."';";
Er det du spørger om er en top liste?
sql = "select count(votesTo) as antalStemmer, users.username, users.lastLogin from users inner join votes on users.userId = votes.votesTo group by users.userId order by antalStemmer desc, lastLogin desc";
Det var nok en lidt kludret forklaring. De query virker fint, men det er ikke det jeg gerne vil. Jeg vil gerne have samtlige userId ud men sorteret efter: 1 antal gange myId har stemt på dem, 2 hvornår de sidst har været logget ind.
Ok, så hvis en bruger har stemt flere gange er det så X antal poster i votes hvor X er lig med det antal gange han har stemt eller har du en counter på voten imellem de to?
Hvis hver stemme er en unik post i votes så må det blive noget som dette:
sql = "select count(votesFrom) as antalStemmer, users.username from users inner join votes on users.userId = votess.voteTo where votes.votesFrom = '".$myId."' group by users.userId order by antalStemmer desc, lastLogin desc";
et eksempel - lad os sige at $users(id, username, lastLogin) indeholder: 1, mads, 20060301 2, jakob, 20060302 3, peter, 20060303 4, brian, 20060304
..og $votes(voteOn, vote, voteFrom) indeholder: 1, 999, 3 (bruger 3 har stemt 999 på bruger 1) 1, 999, 2 (bruger 2 har...) 2, 999, 3 1, 999, 3
jeg er logget ind som $myId = 3 (peter)
Så skulle jeg gerne få følgende ud (i denne rækkefølge): 3 (jeg har ikke stemt på 3, og 3 har været logget ind senere end 4 4 (jeg har ikke stemt på 4 2 (jeg har stemt én gang på 2 1 (jeg har stemt to gange på 1 og derfor kommer 1 tilsidst)
(egentlig burde 3 ikke være på listen efter som det er mig selv)
Ok så må det blive sådan her hvor de to joines på userId og voteTo og stadig med en where på votesFrom = $myid:
sql = "select votes.vote, users.username from users inner join votes on users.userId = votes.voteTo where votes.votesFrom = '".$myId."' order by vote desc, lastLogin desc";
sql = "select votes.vote, users.username from users inner join votes on users.userId = votes.voteTo where votes.voteFrom = '".$myId."' order by vote desc, lastLogin desc";
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.