[php&mysql]top10 sort probleem

Pagina: 1
Acties:

  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 20-08 08:46
Voor mijn website hou ik nou bij waar de mensen vandaan komen met behulp van een $_SERVER[http_referer] , dit wordt in een database gemietert met de tijd er bij om later nog meer stats te maken (* cybermans is stats verslaafd) . Nu wil in een top10 van alle referers brouwen maar het sorten (meest aantal boven) wil voor geen meter.
de html_table_xxx zijn kleine functies die <tr><td>'en zo bakken

mysql table (id, adres, datum tijd)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?PHP
$verschilquery=mysql_query("SELECT DISTINCT * FROM referer group by adres") or die ("verschillende refers error: ".mysql_error());
//hier de top 10 stats

$x=0;
while ($toprefs=mysql_fetch_assoc($verschilquery))
{
    $temp=mysql_query("SELECT * FROM referer where adres='".$toprefs[adres]."'") or die (mysql_error());
    if ($toprefs[adres]=="") $toprefs[adres]="direct hit";
    $temp2=mysql_num_rows($temp);
    //echo $temp2;
    $refstop[$x] = array($toprefs[adres], $temp2);
    //echo $refstop[$x][1]."----".$refstop[$x][0]."<BR>\n";
    $x++;
    }
rsort($refstop);
//reset($refstop[$x]);
$x=0;
html_table_start(array("plaats", "afkomst", "aantal"));
//while (list ($key, $val) = @each ($refstop[$x])) {
while ($refstop[$x]) {
    //echo $refstop[$x][1]." = ".$val."<BR>\n";
    html_table_row(array($x+1, $refstop[$x][0], $refstop[$x][1]));
    $x++;
}
html_table_end();
?>


adres van het resultaat: http://www.nodnl.net/mans/stopsms/stats.php

[ Voor 9% gewijzigd door cybermans op 26-02-2003 14:48 ]

Strava | Runkeeper | Endomondo (mijn leikr uploads)


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Die query is raar, een group by op 1 veld en dan een distinct op alle velden :?
Volgens mij moet dit in mysql kunnen met limit en order by.

Who is John Galt?


  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 20-08 08:46
die query is om alle verschillende adressen te bepalen

Strava | Runkeeper | Endomondo (mijn leikr uploads)


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

En toch heeft justmental gelijk, denk ik, met zijn :? ;)

Ik denk dat het allereerst handig is om je te verdiepen in de basics van mysql. Probeer eens aan de hand van de MySQL manual (http://www.mysql.com) je eigen query uit te leggen :)

Verder is het misschien niet overstandig om eens te kijken naar een UNIQUE constraint op een 'adres' veld, als je 'm uniek wilt hebben? De rest van de gegevens kun je dan met behulp van een zeer eenvoudig datamodel bijhouden, door de adres(id's) te koppelen aan tijden van bezoek en overige gegevens in een andere tabel.

Tot slot kun je in de manual even kijken hoe JOINS werken, als je je datamodel wat beter ingedeeld heb, om de gegevens uit verschillende tabellen samen te brengen. Als je dan een joined select query doet, kun je heel eenvoudig sorteren door ORDER te gebruiken, en het aantal records wat je terug wilt bepalen door LIMIT te gebruiken.

Kortom, neem vanavond nog ff de tijd om de mysql manual (de tutorial is al een goed begin) door te nemen :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 20-08 08:46
drm schreef op 25 February 2003 @ 23:28:


Verder is het misschien niet overstandig om eens te kijken naar een UNIQUE constraint op een 'adres' veld, als je 'm uniek wilt hebben? De rest van de gegevens kun je dan met behulp van een zeer eenvoudig datamodel bijhouden, door de adres(id's) te koppelen aan tijden van bezoek en overige gegevens in een andere tabel.
srry hoor maar dit vind ik eigenlijk wel errug ranzig maar het is een oplossing indien er niemand een beter idee heeft ga ik dat wel ff proberen (zo werkt nu de nummer selectie zo ongeveer ook op de mainsite)

Strava | Runkeeper | Endomondo (mijn leikr uploads)


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Wat is er ranzig aan, als ik vragen mag?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 20-08 08:46
meer tabellen aanmaken dan in principe nodig is (er is nu geen redundantie) ik wil namelijk in de toekomst die table meer velden geven.

de queries doen het wel maar ik zit meer met die sort te klooien

[ Voor 21% gewijzigd door cybermans op 25-02-2003 23:44 ]

Strava | Runkeeper | Endomondo (mijn leikr uploads)


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Jawel, de redundantie zit hem er namelijk in, dat je IP adressen meerdere keren opslaat dan feitelijk nodig is.... Of begrijp ik nou iets volledig verkeerd :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

soms komen bezoekers terug. (vreemde filosofie ik weet het :+ )

Maar dan wil je nog steeds hun IP met de bijbehorende tijd opslaan. (dat noemen ze immers LOGGEN :P )

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 20-08 08:46
nee ik wil gewoon in een record strax alles van 1 "hit" hebben zoals referer, gebruiker ip, user agent, etc etc (big brother iemand?) dan kan ik dat wel allemaal in 20 verschillende tabellen gaan mieteren en dan met joins gaan doen maar denk dat op een gegeven moment ik niet heel erg blij ga worden over hoeveel ms mysql er dan over doet (en de hoeveel heid geheugen)

Strava | Runkeeper | Endomondo (mijn leikr uploads)


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Als je het zou normaliseren zou het eigenlijk stiekum minder ruimte in beslag gaan nemen, maar aangezien je waarschijnlijk een algemeen overzicht gaat genereren na een tijdperiode en dan de data backupped, de statistieken resultaten in een ander tabel gooi, maak je waarschijnlijk schoon je je log tabel op. (zomaar een gokje van mij..)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Tja, er is wat voor beide methoden te zeggen...

Iig hoef je van de performance van MySQL in dergelijke gevallen niet wakker te liggen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 20-08 08:46
ik heb het nu op deze manier op gelost (ik vind het mega ranzig maar het werkt)
index.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?PHP
$adres=$_SERVER[HTTP_REFERER];
if ($adres=="") $adres="direct hit";
$checkquery = mysql_query("SELECT * FROM refers where adres='".$adres."'") 
or die (mysql_error());
if (!mysql_fetch_array($checkquery)) mysql_query("INSERT INTO refers (adres) 
VALUES ('".$adres."')") or die (mysql_error());
$check2query=mysql_query("SELECT * FROM refers where adres='".$adres."'") 
or die (mysql_error());
$result=mysql_fetch_assoc($check2query);
$query = mysql_query("INSERT INTO referer (adres, datum) 
VALUES ('".$result[id]."', '".date("Y-m-d H:i:s")."')") or die (mysql_error());
?>


stats.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?PHP
$queryref=mysql_query("SELECT * FROM refers");
while ($resultref=mysql_fetch_assoc($queryref))
{
    $query=mysql_query("SELECT * FROM referer WHERE adres=".$resultref[id]);
    $aantalref=mysql_num_rows($query);
    //echo $aantalref;
    mysql_query("UPDATE refers set aantal=".$aantalref." where id=".$resultref[id]);
}
$query3=mysql_query("SELECT * FROM refers ORDER BY aantal DESC");
html_table_start(array("plaats", "adres", "aantal"));
$x=1;
while ($topline=mysql_fetch_assoc($query3))
{
    //$query4=mysql_query("SELECT adres from refers where id=".$topline[id]);
    //$adres=mysql_fetch_assoc($query4);
    html_table_row(array($x, $topline[adres], $topline[aantal]));
    $x++;
}
html_table_end();
?>


database structures:

CREATE TABLE referer (
id int(11) NOT NULL auto_increment,
adres int(10) NOT NULL default '0',
datum datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
KEY adres (adres)
) TYPE=MyISAM;

CREATE TABLE refers (
id int(11) NOT NULL auto_increment,
adres varchar(250) NOT NULL default 'direct hit',
aantal varchar(6) default '0',
PRIMARY KEY (id),
KEY adres (adres)
) TYPE=MyISAM;

drm, had jij zo iets voor ogen

[ Voor 34% gewijzigd door cybermans op 26-02-2003 14:48 . Reden: ff naar mijn eigen post in LA aangepast ]

Strava | Runkeeper | Endomondo (mijn leikr uploads)

Pagina: 1