WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   MySQL problem (https://www.wn.se/forum/showthread.php?t=1696)

lorens 2004-02-29 09:48

Hejsan...

Jag har lite problem... Jag lagrar alla som kommer till min sida från någon utomstående sida... Nu vill jag enkelt göra en ny tabell i SQL där jag lagrar URL:er och antalet träffar från varje URL...

Mitt problem är att jag inte vill ha med argumenten i URL:erna, alltså allt efter ? och frågetecknet....

Jag provade med något enkelt som:

Kod:

$sql = "SELECT *".
        " FROM hits_outside".
        " WHERE http_referer REGEXP '^http[s]*://[a-zA-Z0-9-/]*'";

Men detta fungerade inte som jag tänkt... Jag får bara tillbaka 0 eller 1 beroende på om REGEXP:et stämde eller ej... vad jag vill är i SELECT delen i SQL frågan få URL:en utan argumenten och sedan använda GROUP BY för att snabbt och enkelt få antalet rader som är samma URL...

Går detta att göra, alltså i SQL frågan gruppera efter URL utan argument utan att på förhand behandla databasen eller behandla efteråt i PHP?


Jag kanske rentav ska ta alla rader, och i PHP kolla en och en och ta bort argumenten och lagra det?

Tacksam för svar, om någon nu förstår hur jag menade! :P

nicclas 2004-02-29 15:09

Prova med:
Kod:

SELECT LEFT(http_referer, LOCATE('/',http_referer,9)-1) as URL, COUNT(*) as ANTAL FROM hits_outside GROUP BY URL ORDER BY ANTAL DESC;
och se om inte det kan fungera som du tänkt dig.

lorens 2004-02-29 15:42

Det där fungerade i flesta fallen, men inte på länkar som t.ex

http://www.google.se

:(

Om man använder regexps i MYSQL.... Kan man inte få ut det som matchade? På samma sätt som om jag använder (i PHP) preg_match( "/^[abc]*$/", "abba", $preg_matches ); Alltså det som hamnar i $preg_matches.....?

nicclas 2004-02-29 16:21

Ok, nu är ju inte "http://www.google.se" en korrekt referer, men liknande brukar ju dykar upp, lite beroende på vilken (skräp-)browser som används.

Enklaste sättet att fixa ditt problem är att du adderar en "/" i slutet på varje referer innan du lägger dem i din tabell.

Alternativt provar du om inte detta:
Kod:

SELECT LEFT(http_referer,
GREATEST((1-(LOCATE('/',http_referer,9)>0))*LENGTH(http_referer)-1,LOCATE('/',http_referer,9)-1))
as URL, COUNT(*) as ANTAL FROM hits_outside GROUP BY URL ORDER BY ANTAL DESC;

kan fungera =)

Som svar på:
Citat:


Om man använder regexps i MYSQL.... Kan man inte få ut det som matchade? På samma sätt som om jag använder (i PHP) preg_match( "/^[abc]*$/", "abba", $preg_matches ); Alltså det som hamnar i $preg_matches.....?

citerar jag en kommentar i manualen:
"The regular expression support in MySQL seems to be based on traditional-style regex (like ereg() in PHP), not the more sophisticated regular expression matching found in Perl or PHP's preg_match()."

lorens 2004-02-29 17:39

Citat:

Originally posted by nicclas@Feb 29 2004, 14:21
Ok, nu är ju inte "http://www.google.se" en korrekt referer, men liknande brukar ju dykar upp, lite beroende på vilken (skräp-)browser som används.

Enklaste sättet att fixa ditt problem är att du adderar en "/" i slutet på varje referer innan du lägger dem i din tabell.

Alternativt provar du om inte detta:
Kod:

SELECT LEFT(http_referer,
GREATEST((1-(LOCATE('/',http_referer,9)>0))*LENGTH(http_referer)-1,LOCATE('/',http_referer,9)-1))
as URL, COUNT(*) as ANTAL FROM hits_outside GROUP BY URL ORDER BY ANTAL DESC;

kan fungera =)

Som svar på:
Citat:


Om man använder regexps i MYSQL.... Kan man inte få ut det som matchade? På samma sätt som om jag använder (i PHP) preg_match( "/^[abc]*$/", "abba", $preg_matches ); Alltså det som hamnar i $preg_matches.....?

citerar jag en kommentar i manualen:
"The regular expression support in MySQL seems to be based on traditional-style regex (like ereg() in PHP), not the more sophisticated regular expression matching found in Perl or PHP's preg_match()."

Tycker inte heller att "about:blank" är en korrekt referer, men det är juh inte så svårt å gissa vilken webbläsare det är!.... *suck*

Jag har gjort om så jag sköter detta med PHP, för jag vill nämligen ha allt fram till argumenten, men iofs, med din nya kodsnutt och byta ut "/" med "?" så borde det fungera... Men det fungerar fint nu oxxå, inte lika fin kod då men, acceptabel för det lilla jag gör där...

Tack ändå för hjälpen, är inte så insatt på MySQL's mindre använda (för mig iaf) kommandon...

Ang. MySQL's REGEXP.... Det är lite synd, men men, säkert någon bra tanke bakom det!

Tack igen,
//Lorens


Alla tider är GMT +2. Klockan är nu 07:40.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson