• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 19 januari 2026 om 09:34
  • Developer Gezocht

    Mikevdk 10 januari 2026 om 18:57
  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04
  • Partner Gezocht om meerdere NFT Collecties op Open Sea te Plaatsen

    NFT Art Designer 1 maart 2025 om 14:08

Marktplaats

  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 26 december 2025 om 00:07
  • Van een pixelige afbeelding naar een strakke, moderne website

    Syntax 21 december 2025 om 17:05

Selecteer vanuit tabel maar met unieke waarden.

  • Newtimes
  • 21 augustus 2014 om 20:24
  • Newtimes
    Student
    Berichten
    62
    • 21 augustus 2014 om 20:24
    • #1

    De topic titel is een beetje onduidelijk maar ik hoop dat jullie me wel kunnen helpen.

    Ik ben met een CMS bezig (een vrij groot CMS, en we lopen tegen het einde aan :)). Nu is er iets wat we absoluut niet mogen vergeten: namelijk analytics. Dit doen we o.a. met google analytics en new relic. Maar om de gebruikers van het CMS ook feedback te kunnen geven hoe het met de site gaat zijn we ook een kleine PHP oplossing aan het schrijven.

    Nu is het zo dat bij elke pagina view een set van gegevens de database ingestuurd wordt. Voor deze vraag zijn de velden 'ip' en 'agent' het belangrijkst.

    Nu willen wij een realtime overzicht hebben van actieve gebruikers van de laatste 10 minuten. Echter kom ik er niet helemaal uit hoe ik deze query moet opzetten.

    De bedoeling is dat je met elk ip adres en met elke user agent. Bij elkaar als 1 gebruiker word gezien.
    op het moment dat 1 van deze 2 anders is dan ben je een andere gebruiker.

    Nu moeten we dus een lijst met deze gebruikers uit de database trekken maar het lukt me echt niet.

    De database ziet er uber versimpelt dus zo uit:
    -----------------------
    |id | ip | agent |
    | 1 : 84.. | moz.. |
    -----------------------

    De query die ik op het moment heb:

    SQL
    SELECT * FROM `analytics` where date > date_sub(now(), interval 10 minute) group by agent,ip ORDER BY `id` DESC


    Deze geeft op het moment keurig het goede aantal records weer, maar niet de goede hij geeft me namelijk 2 maal de zelfde terug. Echter klopt de telling wel (dus als ik bijv. op mijn mobiel, en op mijn laptop kijk zegt hij netjes 2, maar laat hij 2 keer mijn laptop zien als return)

    Weet iemand wat ik fout doe? En kan mij eventueel helpen?

    Bij voorbaat dank!

  • xxx
    Professional
    Ontvangen Reacties
    1
    Berichten
    902
    • 22 augustus 2014 om 20:32
    • #2

    Kijk eens naar de DISTINCT functie van MySQL.

    Uniek mens.

  • M.Beers
    Elite members
    Ontvangen Reacties
    31
    Berichten
    460
    • 23 augustus 2014 om 00:17
    • #3

    Zoals Perry aangeeft kan je DISTRICT gebruiken of je kan REPLACE INTO gebruiken... Natuurlijk ga ik niet het hele script voor je schrijven maar onderstaand een voorbeeld

    Database:

    Code
    CREATE TABLE  `analytics` (
      `ip` varchar(50) NOT NULL,
      `time` datetime NOT NULL,
      PRIMARY KEY (`ip`)
    )

    Update script:

    PHP
    <?php
    $user=$_SERVER['REMOTE_ADDR'];
    $date=date('c');
    mysql_query("REPLACE INTO `analytics` (ip,time) VALUES('$user','$date')");
    ?>

    Ophaal script:

    PHP
    <?php 
    $d=date('c',time()-10*60);//last 10 minutes
    $q=mysql_query("SELECT * FROM `analytics` WHERE time > '$d'");
    if(mysql_affected_rows()>0){
        print "<ul>";
        while($users=mysql_fetch_array($q)){
            print "<li>{$users[0]}</li>";
        }
        print "</ul>";
    }
    ?>
    Toon Meer

    Dit was mijn spreekbeurt, zijn er nog vragen?

  • K.Rens
    Eigenaar
    Ontvangen Reacties
    241
    Berichten
    4.472
    Filebase Entries
    2
    • 24 augustus 2014 om 01:16
    • #4

    Als je niet elke view moet bijhouden, om te weten wat ze bezocht hebben, in die tabel, dan is "replace into" inderdaad perfect.
    Als deze tabel meerdere functies heeft, zoals weten wie wat wanneer heeft bekeken, dan kun je dit niet gebruiken.

    Dan dien je te werken met een DISTINCT mysql query.
    Ik weet niet 100% zeker wat je juist wil, maar dit kan bv al werken:

    SQL
    SELECT DISTINCT ip,agent FROM `analytics` where date > date_sub(now(), interval 10 minute) ORDER BY `id` DESC


    Dan geeft hij gewoon alle unieke combinaties weer van ip en agent.

  • Newtimes
    Student
    Berichten
    62
    • 25 augustus 2014 om 09:38
    • #5
    Citaat van K.Rens

    Als je niet elke view moet bijhouden, om te weten wat ze bezocht hebben, in die tabel, dan is "replace into" inderdaad perfect.
    Als deze tabel meerdere functies heeft, zoals weten wie wat wanneer heeft bekeken, dan kun je dit niet gebruiken.

    Dan dien je te werken met een DISTINCT mysql query.
    Ik weet niet 100% zeker wat je juist wil, maar dit kan bv al werken:

    SQL
    SELECT DISTINCT ip,agent FROM `analytics` where date > date_sub(now(), interval 10 minute) ORDER BY `id` DESC


    Dan geeft hij gewoon alle unieke combinaties weer van ip en agent.

    Het idee is dat we wel elke view bij houden. De database structuur voor deze data afhandeling staat al klaar etc.

    Distinct is inderdaad wat ik nodig ga hebben denk ik, echter krijg ik dan alleen de velden ip en agent terug. Terwijl er iets meer velden zijn. Zo ver ik weet is dit niet mogelijk met distinct (of ik heb hem al jaren verkeerd gebruikt)

    Ik denk dat ik het op ga lossen door een extra veld aan te maken waar gewoon het ip, en de agent bijelkaar staan zodat ik maar hoef te scannen naar 1 uniek veld.

    Bedankt iedereen :).

    Betere alternatieven mogen altijd trouwens!

  • Thisguyisgone
    Elite members
    Ontvangen Reacties
    197
    Berichten
    7.880
    • 25 augustus 2014 om 10:09
    • #6

    SELECT DISTINCT ip,agent
    Kan je meerdere velden zetten.

  • Newtimes
    Student
    Berichten
    62
    • 25 augustus 2014 om 11:45
    • #7
    Citaat van Ferhat

    SELECT DISTINCT ip,agent
    Kan je meerdere velden zetten.

    Ik heb echter alle velden nodig van de rijen waar die 2 uniek zijn.

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 27 augustus 2014 om 12:45
    • #8

    GROUP BY is in deze wel de meeste logische keuze, dus wat dat betreft zat je helemaal goed. Ik denk alleen dat je twee foutjes had, de group velden wil je denk ik omdraaien (eerst groeperen op IP, dan op user-agent) en daarnaast moet je de WHERE-clause verplaatsen naar een HAVING clause met een MAX(). Ofwel:

    SQL
    SELECT * FROM analytics GROUP BY ip, agent ORDER BY date HAVING MAX(date) > DATE_SUB(NOW(), interval 10 minute)

    De kolommen samenvoegen is niet echt een goed idee (eerste normaalvorm). Mocht dit niet werken, kun je dan het CREATE TABLE statement met wat INSERT statements met wat voorbeelddata erin posten?

  • Newtimes
    Student
    Berichten
    62
    • 27 augustus 2014 om 12:55
    • #9

    Ik heb het probleem opgelost,

    Code
    $db->query('SELECT * FROM `analytics` where domain =:dom AND date > date_sub(now(), interval 10 minute) GROUP BY ip,agent ORDER BY `id` ASC');

    Dat is het geworden, het probleem zat hem namelijk niet in mijn query, maar in de functie waarmee ik de data verwerkte (deze nam huidige user agent data ipv de via de functie meegestuurde (stomme fout :P))

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37

Gebruikers die dit topic bekijken

  • 1 Gasten
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design