Avatar billede n-emy Nybegynder
06. oktober 2010 - 12:31 Der er 8 kommentarer og
1 løsning

Sortere direkte i SQL'en

Hejsa eksperter

Jeg har et problem som jeg ikke ved om kan løses (eller det kan sikkert løses jeg kan bare ikke lige se hvordan). Jeg har en række referencer i en tabel (altså hvor brugere er kommet fra til min side), og tabelstrukturen ser således ud:

referencer:
id int(11) auto primary
url varchar (255)
tid int(11)

Jeg har lavet det sådan at flere referencer godt kan komme samtidig bare med forskelligt tidsstempel så det er muligt at hente data ud mellem indtastede datoer. Problemet er hvordan jeg sortere det ud fra SQL'en uden at den poster de samme referencer igen og igen. F.eks. hvis der er tre referencer fra eksperten.dk og en fra udvikleren.dk vil jeg have den skriver:
Eksperten.dk - 3 hits
Udvikleren.dk - 1 hit

og ikke
Eksperten.dk
Eksperten.dk
Eksperten.dk
Udvikleren.dk

Det kunne gøres med noget lignende

//fra functions filen
function getCount($mysqlquery) {
    $sgetcount = mysql_query($mysqlquery);
    return mysql_num_rows($sgetcount);
}
//


$referencecheck = "";
$sreferencer= mysql_query("SELECT * FROM referencer WHERE tid > '$starttime' AND tid < '$endtime' ORDER BY url");
WHILE($referencer= mysql_fetch_array($sreferencer)) {

if($referencer[url] <> $referencecheck) {
$hits = getCount("SELECT * FROM referencer WHERE url = '$referencer[url]' AND tid > '$starttime' AND tid < '$endtime'");
print"$referencer[url] - $hits hits<br />";
} else {
}


}

Men kunne egentlig være meget interessant at vide om det kan lade sig gøre direkte fra SQL'en og komme uden om if-løsningen i php? :)
Avatar billede n-emy Nybegynder
06. oktober 2010 - 12:32 #1
Var lige for hurtigt på aftrækkeren:


$referencecheck = "";
$sreferencer= mysql_query("SELECT * FROM referencer WHERE tid > '$starttime' AND tid < '$endtime' ORDER BY url");
WHILE($referencer= mysql_fetch_array($sreferencer)) {

if($referencer[url] <> $referencecheck) {
$hits = getCount("SELECT * FROM referencer WHERE url = '$referencer[url]' AND tid > '$starttime' AND tid < '$endtime'");
print"$referencer[url] - $hits hits<br />";
} else {
}

$referencecheck = $referencer[url];
}
Avatar billede perfektus Nybegynder
06. oktober 2010 - 12:34 #2
Du kan prøve at læse lidt om count() sql funktionen
http://www.w3schools.com/SQL/sql_func_count.asp
Avatar billede n-emy Nybegynder
06. oktober 2010 - 13:02 #3
Der tæller den jo bare og giver et output i tal, jeg vil have den til at filtrere direkte i SQL'en så jeg kan sortere efter antal besøg osv. =)
Avatar billede webweaver Praktikant
06. oktober 2010 - 13:05 #4
Jeg ville lave et felt mere i din database til antal hits.

Jeg kan lige vise dig en løsning senere, når jeg sidder på den anden computer :)
Avatar billede erikjacobsen Ekspert
06. oktober 2010 - 13:10 #5
Med det du har kan du

  SELECT url,COUNT(*) FROM .... GROUP BY url ORDER BY COUNT(*)
Avatar billede morten-hbm Nybegynder
06. oktober 2010 - 13:12 #6
Hvad hvis du bruger følgende:

SELECT distinct url, count(*) as antal FROM referencer WHERE tid > '$starttime' AND tid < '$endtime' group by url ORDER BY url
Avatar billede morten-hbm Nybegynder
06. oktober 2010 - 13:14 #7
Nå, var så lige for langsom her, men mit gør det samme som erikjacobsen, 'distinct' behøves ikke, fandt jeg lige ud af :)
Avatar billede n-emy Nybegynder
06. oktober 2010 - 13:27 #8
Jeg brugte mortens løsning, den var lige til at smide ind i mit script, tak for hjælpen drenge :)
Avatar billede morten-hbm Nybegynder
06. oktober 2010 - 13:33 #9
Det var så lidt :)
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