Avatar billede llSimsll Nybegynder
18. oktober 2009 - 20:40 Der er 12 kommentarer

Sortere i 2 tebeller

Først lige "baggrunds viden";
CREATE TABLE `ratings` (
  `id` varchar(11) NOT NULL,
  `total_votes` int(11) NOT NULL default '0',
  `total_value` int(11) NOT NULL default '0',
  `used_ips` longtext,
  PRIMARY KEY  (`id`)
);


CREATE TABLE `game_games` (
  `id` int(3) NOT NULL auto_increment,
  `navn` varchar(50) NOT NULL,
  `kategori` varchar(3) NOT NULL,
  `link` varchar(100) NOT NULL,
  `file` varchar(100) NOT NULL,
  `billede` varchar(100) NOT NULL,
  `beskrivelse` text NOT NULL,
  PRIMARY KEY  (`id`)
);

Sådan ser 2 tabeller ud, som jeg gerne vil hive en linje ud af.
Den skal indeholde id, navn, billede og beskrivelse sortert efter rating. ID i de 2 tabeller er referencen mellem dem.

Jeg er helt på barbund og håber at nogen vil hjælpe :)
Avatar billede fant0mas Nybegynder
18. oktober 2009 - 21:01 #1
Det er ikke så godt det der.
Indsæt en række i rating for hver bruger i stedet, med en foreign key til id'et på din games tabel.
Avatar billede fant0mas Nybegynder
18. oktober 2009 - 21:12 #2
CREATE TABLE IF NOT EXISTS `game_ratings` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `FK_games_ID` int(9) NOT NULL,
  `rate` tinyint(9) NOT NULL,
  `ip` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
)

Så skal det bare hentes:

SELECT *, AVG(gr.rate) as avg, COUNT(gr.id) as total
FROM game_games gg
LEFT JOIN game_ratings gr ON gr.FK_games_id = gg.id
WHERE gg.id = 1

Gennemsnit = avg
Antal stemmer = total
Avatar billede fant0mas Nybegynder
18. oktober 2009 - 21:15 #3
Ret til:
SELECT gg.*,
Avatar billede fant0mas Nybegynder
18. oktober 2009 - 21:21 #4
Når jeg lige læser igen, kan jeg se at query'en skal rettes til:

SELECT gg.*, AVG(gr.rate) as avg, COUNT(gr.id) as total
FROM game_games gg
LEFT JOIN game_ratings gr ON gr.FK_games_id = gg.id
GROUP BY gg.id
ORDER BY avg DESC
Avatar billede llSimsll Nybegynder
19. oktober 2009 - 17:23 #5
Hvad skal din nye tabel erstatte?

Det ser ellers godt ud! :)
Avatar billede fant0mas Nybegynder
19. oktober 2009 - 18:17 #6
Ratings.

Så indsætter du en række hver gang en bruger stemmer.
FK_games_id er id'et i game_games. FK står for Foreign Key, det er altså din primary key i games tabellen.
Avatar billede llSimsll Nybegynder
20. oktober 2009 - 15:12 #7
Der mangler noget i din tabel.
Den viste rating er jo total rating divideret antal stemmer.

Altså total_value divideret total_votes.
Avatar billede llSimsll Nybegynder
20. oktober 2009 - 16:08 #8
Nej, min fejl.
Jeg er dog ikke glad for at ændre på rating tabellen, da det vil betyde at jeg skal ændre mit stemme script totalt.
Avatar billede fant0mas Nybegynder
20. oktober 2009 - 17:46 #9
Jeg kan ikke forestille mig det kan tage mere end 10 min. Det er vel bare et par links og et update statement? :D
Avatar billede llSimsll Nybegynder
26. oktober 2009 - 16:50 #10
fant0mas > Nej rantings er en del af et andet større script jeg ikke har skrevet selv. Desværre :/
Avatar billede fant0mas Nybegynder
26. oktober 2009 - 18:37 #11
Den funktion der opdaterer ratings, findes vel kun et sted? Så skal den bare omskrives, så det bliver gjort rigtigt.

Hvis du finder den og smider den her, så finder vi ud af det!
Avatar billede llSimsll Nybegynder
22. april 2013 - 10:21 #12
Gammel ulukket tråd, beklager. hvis du vil have point fant0mas, så smid et svar :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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