Avatar billede elskermad.dk Nybegynder
15. juli 2004 - 21:02 Der er 12 kommentarer og
1 løsning

gruppere rækker efter noget af kolonnen og sortere efter antal

hej eksperter :)

jeg er i gang med et statestikscript og mangler der for en del viden omkring håndtering af min mysql database, håber derfor at få lidt hjælp hen af aftenen...!

jeg har en tabel som indeholder en ref som jeg gerne vil have skrevet på min statestikside...
men vil jo ikke have skrevet 100 rækker, så derfor vil jeg gerne have rækkerne grupperede efter domæne... (tage højde for at http://www. og http:// er det samme)
derefter skal der sorteres således at det er den gruppe med flest rækker som bliver vist øverst!

et eksempel:

id ref
1 http://www.hej.dk/forum/1.php
2 http://jubii.dk/
3 http://www.hej.dk/
4 http://www.bent.dk/artikel/read.php?post=241
5 http://jubii.dk/
6 http://www.minside.dk/index.html
7 http://www.jubii.dk/
8 http://eksperten.dk/spm/
9 http://www.alvision.dk/kontakt.php
10 http://www.google.com/da
11 http://www.google.dk/search?q=mysql
12 http://test.hej.dk/nyheder/

skal så resultere i denne liste:
jubii.dk (3)
hej.dk (2)
bent.dk (1)
minside.dk (1)
eksperten.dk (1)
alvision.dk (1)
google.com (1)
google.dk (1)
test.hej.dk (1)

håber det kan lade sig gøre!?
Avatar billede arne_v Ekspert
15. juli 2004 - 21:07 #1
Den nemme løsning er:

opret en ny kolonne domæne hvori du når du gemmer en række gemmer det
strippede domæne

altså:

id ref                            domain
1 http://www.hej.dk/forum/1.php  hej.dk
2 http://jubii.dk/                jubii.dk

Og så lave en query:

SELECT domain,COUNT(*) AS n
FROM tabelnavn
GROUP BY domain
ORDER BY n DESC

Men jeg ved ikke om det er godt nok for dig.
Avatar billede elskermad.dk Nybegynder
15. juli 2004 - 21:10 #2
hvis den kan laves i mysql vil jeg blive _meget_ glad da der allerede er en del rækker i tabelen! vil gerne hæve point hvis det giver mere arbejdsglæde?! :]
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 21:19 #3
Det er ikke bare den nemme løsning som arne_v foreslår, det er også den rigtigste.
Du skal så blot lave konverteringen fx med et script på de rækker du allerede har.
Avatar billede elskermad.dk Nybegynder
15. juli 2004 - 21:22 #4
okay, men tænkte også på at tabelen vil komme til at fylde en del mere... nogle steder dobbelt så meget som nødvendigt, men det vil være umuligt at lave det på den direkte mysql-vej?
Avatar billede elskermad.dk Nybegynder
15. juli 2004 - 21:27 #5
<?

$ref = str_replace("http://","",$stat_ref);
$refdom = explode(".",$ref);

if ($refdom[0] == "www") {
    $refdom= str_replace("www.","",$ref);
}
else {
    $refdom= $_SERVER['SERVER_NAME'];
}

$refdomain = explode("/",$refdom);
$refdomain = $refdomain[0];

?>

er dette den mest hensigtmææsige måde at klippe alt væk fra reffen således det kun er domænet der er tilbage?

og hvordan laver jeg sql/php-kode så de gamle rækker får lagt domænet over i ref_domain fra ref?
Avatar billede arne_v Ekspert
15. juli 2004 - 21:41 #6
Noget i stil med:

UPDATE tabelnavn SET domain = ref;
UPDATE tabelnavn SET domain = RIGHT(domain,LENGTH(domain)-7) WHERE LEFT(domain,7)='http://';
UPDATE tabelnavn SET domain = RIGHT(domain,LENGTH(domain)-4) WHERE LEFT(domain,4)='www.';
Avatar billede elskermad.dk Nybegynder
15. juli 2004 - 21:43 #7
det sgi bar klasse! :] læg et svar arne_v og eric hvis du vil ha :]
Avatar billede arne_v Ekspert
15. juli 2004 - 21:47 #8
svar
Avatar billede elskermad.dk Nybegynder
15. juli 2004 - 21:48 #9
haha jeg glemte lige at få det til virke igen arne_v ;D

håber du kan PHP !!

$fors4 = mysql_query("SELECT COUNT(*) AS n FROM statistik WHERE site = '$statnavn' AND ref != '' GROUP BY ref_domain ORDER BY n DESC") or die(mysql_error());
while($row = mysql_fetch_array($fors4)) {
    $ref = $row["ref_domain"];
    $antal = $row["n"];
       
    echo"
    $ref ($antal)<br>
    ";
}

den udskriver ikke noget, men der er rækker i tabelen
Avatar billede elskermad.dk Nybegynder
15. juli 2004 - 21:49 #10
argh sådanne?
SELECT *,COUNT(*) AS n FROM statistik WHERE site = '$statnavn' AND ref != '' GROUP BY ref_domain ORDER BY n DESC

er det rigtig sql at lave en * efterfuldt af flere så? for * betyder jo alt
Avatar billede arne_v Ekspert
15. juli 2004 - 21:52 #11
Jeg foreslog:

SELECT ref_domain,COUNT(*) AS n FROM statistik WHERE site = '$statnavn' AND ref != '' GROUP BY ref_domain ORDER BY n DESC
Avatar billede arne_v Ekspert
15. juli 2004 - 21:52 #12
Og jeg er ikke god til PHP.
Avatar billede elskermad.dk Nybegynder
15. juli 2004 - 22:12 #13
oki men det ser ud til at virke nu så må håbe det er rigtigt :] igen mange tak!
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