• Inloggen
  • Registreer
  • Zoeken
Dit topic
  • Overal
  • Dit topic
  • Dit forum
  • Artikelen
  • Pagina's
  • Forum
  • Downloads
  • Meer opties

ICTscripters

Dé plek voor IT

Dé plek voor IT

Aanmelden

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  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
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  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
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  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
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • [Beta] Ottomaan: gratis browserspel met een echte, levende stad. Feedback gezocht!

    frio 27 oktober 2026 om 12:22
  • Port Father: beta van een browsergame in Antwerpen 1931, feedback welkom

    Jeroen.G 26 oktober 2026 om 10:33
  • Maffia Hotel: een browsergame waarin je van lobbygast naar spil van het hotel groeit

    eeyk 22 oktober 2026 om 18:43
  • Crime Club volledig herschreven vanaf nul

    frio 19 oktober 2026 om 23:57
  • Malavita (nieuwe maffia game, van 0)

    jos 19 oktober 2026 om 23:18
  • Herkent deze Notion-structuurscan echte problemen?

    Jeroen.G 19 oktober 2026 om 15:09
  • 🚀 WE ZOEKEN TESTERS! 🚀

    Servertjee 3 oktober 2026 om 10:56
  • Luchtvaartsoftware: Hoe technologie de moderne luchtvaart verandert

    saggy2829 30 september 2026 om 19:31

Marktplaats

  • [Aanbod] Stadskaart voor je browsergame: van menu naar klikbare stad, vanaf €200

    frio 29 oktober 2026 om 18:17
  • [Verkoop] G4G (Gangsters 4 Gangsters): volledige broncode, nieuw gebouwd in PHP 8.3 | € 30 per domein

    frio 27 oktober 2026 om 18:54
  • [TE KOOP] Malavita.be [Maffiaspel, gebaseerd op omicidio.nl, unieke code]

    Dpm_x 26 oktober 2026 om 00:22

Selecteer vanuit tabel maar met unieke waarden.

  • Newtimes
  • 21 augustus 2014 om 20:24
  • Newtimes
    Leerling
    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!

  • Gast, wil je besparen op je domeinnamen? (ad)
  • xxx
    Professional
    Berichten
    902
    • 22 augustus 2014 om 20:32
    • #2

    Kijk eens naar de DISTINCT functie van MySQL.

    Uniek mens.

  • M.Beers
    Elite members
    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>";
    }
    ?>
    Meer tonen

    Dit was mijn spreekbeurt, zijn er nog vragen?

  • K.Rens
    Eigenaar
    Berichten
    4.479
    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
    Leerling
    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
    Berichten
    7.880
    • 25 augustus 2014 om 10:09
    • #6

    SELECT DISTINCT ip,agent
    Kan je meerdere velden zetten.

  • Newtimes
    Leerling
    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
    Meester
    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
    Leerling
    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))

Registratie

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

Nu registreren Aanmelden

ICT Nieuws

  • PHP waarschuwt voor twee ernstige bugs die makkelijk uit te buiten lijken

    Aaron 22 oktober 2026 om 22:19

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
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacyverklaring
  10. Contact
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design