Beste mensen,

Ik wil het volgende middels een query maken: "In een MySQL tabel staan rijen met bezoekers, wanneer een IP nog nooit eerder is langsgeweest dan is deze "Totaal uniek". Welke query moet ik maken om de waarde "totaal uniek" van vandaag te berekenen?

Met vriendelijke groeten,

Jelmer Baken
Zorg er voor dat de combinatie van de kolom 'ip' en 'datum' uniek is. Dan kun je hier nooit een dubbele waarde in zetten.

SELECT ip, datum FROM tabelnaam WHERE COUNT(ip) = 1 AND datum = CURRENTDATE() GROUP BY ip

(niet getest)
Hm nee in dit geval krijg ik toch alle ip's die vandaag langsgekomen zijn?

Ik wil alle ip's die vandaag nooit eerder langsgekomen zijn.

Jelmer
Met de count zorg je er voor dat je slechts ip-adressen selectereerd die 1x in je database staan. Die komen dus niet vaker voor. Vervolgens pak je alleen die records die een datum van vandaag hebben. Dan ben je er toch?

Al zou het kunnen zijn dat je de COUNT() in een subquery moet zetten. Je zou het even moeten testen.

Ongetwijfeld zijn er nog andere/betere oplossingen, maar dat kun je beter aan een slimmerik vragen ;)
Klopt!

Heb er nu dit van gemaakt:

<?
// Aantal totaal unieke bezoekers
$sql = mysql_query("SELECT dag, maand, jaar, ip FROM onlinewebstats_hit WHERE COUNT(ip) = 1 AND dag = '".date(d)."' AND maand = '".date(m)."' AND jaar = '".date(Y)."' GROUP BY ip");
$totaal_uniek = mysql_num_rows($sql);


?>

Maar wil niet lopen (mysql_num_rows(): supplied argument is not a valid MySQL result resource in)

Waar zit mijn fout?

Jelmer
SELECT dag, maand, jaar ??? Wat is dit nu weer voor een vreemde constructie? Je gaat me toch niet wijsmaken dat je hiermee een datum in je database wegschrijft?

Een datum sla je op in een DATE, in het het formaat yyyy-mm-dd. En mocht je dat niet willen, dan wordt het een DATETIME !
Heb daar wat mee zitten prutsen, maar daar ligt toch niet de kern waarom het niet zou werken??
het werkt wel

maar standaard worden datums opgeslagen in het DATE formaat en tijd in TIME

samen DATETIME
Maarre waar zit nu de fout in:

<?
// Aantal totaal unieke bezoekers
$sql = mysql_query("SELECT dag, maand, jaar, ip FROM onlinewebstats_hit WHERE COUNT(ip) = 1 AND dag = '".date(d)."' AND maand = '".date(m)."' AND jaar = '".date(Y)."' GROUP BY ip");
$totaal_uniek = mysql_num_rows($sql);

?>
Baken schreef op 26.05.2006 20:13
Heb daar wat mee zitten prutsen, maar daar ligt toch niet de kern waarom het niet zou werken??
Ga er maar eens mee rekenen, dan snap je direct waarom het niet werkt.

Eén plus één = ???

of

1 + 1 = ???

Hoe zou jij deze gegevens opslaan en hoe zou jij gaan rekenen in PHP? Volgens de eerste of de tweede variant? Ik denk dat ik het antwoord wel weet...
Als je wilt weten waar de foutmelding vandaan komt, dan zou je kunnen overwegen om iets aan foutafhandeling te gaan doen. Dat mag overigens nooit ontbreken omdat queries vroeg of laat altijd fout gaan.

Tip: Zet je query in een aparte variabele en voer deze uit met mysql_query(). Dan kun je de query nog eens echoen. Wel zo handig. En gebruik uiteraard mysql_error() om de fout te achterhalen.

Reageren