Avatar billede yezper Nybegynder
07. november 2003 - 14:50 Der er 1 løsning

Top 10/20/30/osv. lister

Jeg er ved at lave et link index i stil med Yahoo! og Jubii, og har brug for
at lave en Top 10/20/30/.. liste over de links, som flest har klikket på i
de sidste 7 dage.

Tabelopbygningen er således:

CREATE TABLE `links_click` (
  `ID` int(11) NOT NULL auto_increment,
  `LinkId` int(11) NOT NULL default '0',
  `CatId` int(11) NOT NULL default '0',
  `ClickCategory` char(3) NOT NULL default '0',
  `Erotic` smallint(6) NOT NULL default '0',
  `ClickUrl` varchar(255) NOT NULL default '',
  `DateClick` datetime NOT NULL default '0000-00-00 00:00:00',
  `IPAddr` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`ID`),
  KEY `LinkId` (`LinkId`,`CatId`),
  KEY `DateClick` (`DateClick`),
  KEY `ClickCategory` (`ClickCategory`)
  TYPE=MyISAM

En post kunne f.eks. se således ud:
insert into `links_click`
  (LinkId, CatId, ClickCategory, Erotic, ClickUrl, DateClick, IPAddr)
values
  (1, 17, 'lnk', 0, '(Link: http://www.heaven-copenhagen.dk/',)http://www.heaven-copenhagen.dk/', '2003-10-17
18:48:21', '212.212.212.212');

Som nævnt er de kun de klik, som er foretaget i de sidste 7 dage der skal
indgå i statistikken, og hvis brugeren med IP adressen 212.212.212.212
indenfor denne periode har klikket på linket med id 1, er det kun det første
klik som skal tælles med.

Desuden har jeg brug for at hente oplysninger fra den tabel, som indeholder
de faktiske oplysninger om hvert enkelt link (beskrivelse, keywords osv.,)
for at kunne præsentere disse oplysninger overfor brugeren af toplisterne.

Jeg kan næsten regne ud, at der skal være nogle JOINS, DISTINCT, GRGOUP BY osv., men jeg er ikke så forfærdeligt hård til SQL, så jeg håber meget, at der her er nogen som vil/kan hjælpe.
Avatar billede yezper Nybegynder
07. november 2003 - 20:23 #1
Har fået en løsning af andre veje:

SELECT DISTINCT(links_click.LinkId) AS lid, COUNT(links_click.LinkId) AS numClicks, links_list.id AS listid, links_list.SiteTitle AS SiteTitle, links_list.SiteUrl AS SiteUrl, links_list.Description AS Description
FROM links_click
INNER JOIN links_list
ON links_click.LinkId = links_list.id WHERE ClickCategory IN('lnk','sel')
GROUP BY LinkId
ORDER BY numClicks DESC
LIMIT 0,10

Denne forespørgsel fjerner dog ikke flere klik fra samme ip på samme link, men det er helt ok - blev overtalt til ikke at bruge denne metode.
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