Kom ihåg mig?
Home Menu

Menu


MySQL problem

Ämnesverktyg Visningsalternativ
Oläst 2004-02-29, 09:48 #1
lorens lorens är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2003
Inlägg: 24
lorens lorens är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2003
Inlägg: 24
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
lorens är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-02-29, 15:09 #2
nicclas nicclas är inte uppkopplad
Flitig postare
 
Reg.datum: May 2003
Inlägg: 340
nicclas nicclas är inte uppkopplad
Flitig postare
 
Reg.datum: May 2003
Inlägg: 340
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.
nicclas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-02-29, 15:42 #3
lorens lorens är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2003
Inlägg: 24
lorens lorens är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2003
Inlägg: 24
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.....?
lorens är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-02-29, 16:21 #4
nicclas nicclas är inte uppkopplad
Flitig postare
 
Reg.datum: May 2003
Inlägg: 340
nicclas nicclas är inte uppkopplad
Flitig postare
 
Reg.datum: May 2003
Inlägg: 340
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()."
nicclas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-02-29, 17:39 #5
lorens lorens är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2003
Inlägg: 24
lorens lorens är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2003
Inlägg: 24
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
lorens är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 18:26.

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