webForumDet fria alternativet

SQL för unika besökare / månad

Databaser & SQL

6 svar · 223 visningar · startad av UrMe

Medlem sedan apr. 2001762 inlägg
Frågan#1

Jag har är ingen hejare på SQL direkt ;)
Men det jag vill åstadkomma är att räkna unika besökare.
De unika besökarna ska räknas på följande sätt. Man räknar bara samma ip en gång per dag.

Koden ser ut så här just nu:
(Det är PHP)

for($manad=1;$manad<13;$manad++)
{

$totaltmanad = 0;

	for($dag=1;$dag<32;$dag++)
	{
		if($manad < 10)
		{

			if($dag < 10)
			{
				$manadu = mysql_query("SELECT count(distinct ip) as antal FROM $databas_table WHERE datum LIKE '2002-0$manad-0$dag'");
				$rowmanadu = mysql_fetch_array($manadu);
			}
			else if($dag >= 10)
			{
				$manadu = mysql_query("SELECT count(distinct ip) as antal FROM $databas_table WHERE datum LIKE '2002-0$manad-$dag'");
				$rowmanadu = mysql_fetch_array($manadu);
			}
		}
		else if($manad >= 10)
		{
			if($dag < 10)
			{
				$manadu = mysql_query("SELECT count(distinct ip) as antal FROM $databas_table WHERE datum LIKE '2002-$manad-0$dag'");
				$rowmanadu = mysql_fetch_array($manadu);
			}
			else if($dag >= 10)
			{
				$manadu = mysql_query("SELECT count(distinct ip) as antal FROM $databas_table WHERE datum LIKE '2002-$manad-$dag'");
				$rowmanadu = mysql_fetch_array($manadu);
			}
		}

		$antaldag = $rowmanadu["antal"];
		$totaltmanad = $totaltmanad + $antaldag;
	}

	$totalt[$manad] = $totaltmanad;

}

Undrar om det finns nå bättre sätt.. för just nu börjar databasen innehålla 30000 besök.. och det
ökar med 2000 varje dag :) .. så det går oerhört segt just detta..
Fråga gärna om nåt är oklart.
Tack på förhand!

Medlem sedan dec. 200012 464 inlägg
#2
query = "select count(distinct ip),month(datum) from $databas_table where datum >= '2002-01-01' and datum <= '2002-12-31' 
group by month(datum) order by month(datum)";

Har du något index på datumkolumnen?

Medlem sedan apr. 2001762 inlägg
#3

Hehe.. den koden ser ju lite renare ut :)
Men det jag undrar över är hur jag plockar ut antalet varje månad.. kan man skriva till "as antal" efter count(distinct ip) ?..

Ja.. allt ligger ju i en tabell.. och varje besök har ett unikt ID..

Medlem sedan dec. 200012 464 inlägg
#4

Det går att skriva dit antal och använda det. Annars så kan man indexera i resultatarrayen med numeriska index, så index 0 motsvarar första värdet.

Det jag menade med min fråga om index var om du hade skapat ett index enbart för datum-kolumnen.

Medlem sedan apr. 2001762 inlägg
#5

Okej..
Men det blir fel på SQL frågan..
Får inge mysql_error heller står bara "Supplied argument is not a valid mysql result...... "

Det där med att indexera resultatarrayen alltså det blir nåt sådant här eller?:

$nr = 0;
while($row = mysql_fetch_array($resultat))
{
	echo $row[$nr];
                $nr++;
}

Eller har jag missuppfattat det helt? ;)

Det där med index på enbart datum-kolumnen hajjar jag inte riktigt :) .. jag hade skapat en array bara som lagrade antalet besökare för varje månad.

Medlem sedan dec. 200012 464 inlägg
#6

Hur ser resten av koden ut?

Med indexering så menade jag bara

while($row = mysql_fetch_array($resultat))
{
	echo $row[0];
}

Man kan skapa index på kolumner i en tabell i databasen för att snabba upp sökningar och sorteringar

http://www.mysql.com/doc/C/R/CREATE_INDEX.html

Medlem sedan apr. 2001762 inlägg
#7

Glöm det som stod här förut... :r
Jag fick till det nu.. fan vad bra!
Tack Lars G ... du är ju kungen på SQL!!!! :e

275 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
145 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
138 ms — ändringar (db)