IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Vérifier un interval dans un champt mysql


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Par défaut Vérifier un interval dans un champt mysql
    Bonjour,

    je créé une page pour mon site qui permet à mes membres de visiter des sites web d'annonceur.
    Chaque fois qu'il visite un annonceur je l'enregistre. ils doivent visiter le site un certain nombre de seconde.

    Voici la structure de la table de log, qui est rempli à chaque visite:

    idmembre | idsite | timestamps(INT 10)

    Je voudrai créé une requète sql qui me sorte les idmembres dont l'interval entre 2 visites est infèrieurs à XX seconde mais je ne vois pas du tout comment tourner ma requète pour comparer 2 timestamps.

    Est ce que vous auriez une idée ou quelque chose qui pourrait m'aider?
    Je ne souhaite pas faire de requète à chaque fois pour vérifier si il a visiter le site le nombre de seconde voulu.

    Merci beaucoup pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne sais pas si c'est réalisable en SQL.
    En PHP il suffit de lire la requete classée par timestamp et de regarder la difference entre l'enregistrement courant et l'enregistrement précédent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Par défaut
    Bonjour.

    La fonction TIMEDIFF par exemple pourrait t'être utile.

    http://dev.mysql.com/doc/refman/5.0/...functions.html

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Par défaut
    j'avais déja entendu parlé de TIMEDIFF mais il n'est pas possible de donné en argument le timestamp précédent et le timestamp actuel.

    C'est vrai que c'est tou con en php, j'y avais pas pensé .

  5. #5
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Je l'ai fait, pour le fun.

    Avec cette table :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE test (
    idmembre int,
    idsite int,
    timestamps int);
    INSERT INTO test VALUES (1, 2, 1252920388);
    INSERT INTO test VALUES (1, 2, 1252920410);
    INSERT INTO test VALUES (1, 2, 1252920442);
    INSERT INTO test VALUES (2, 2, 1252920451);
    INSERT INTO test VALUES (2, 2, 1252920469);

    La requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT test_min.idmembre, test_min.idsite, maxi-mini AS duree
    FROM (
         SELECT idmembre, idsite, MIN(timestamps) AS mini
         FROM test
         GROUP BY idmembre, idsite
    ) AS test_min
         JOIN (
              SELECT idmembre, idsite, MAX(timestamps) AS maxi
              FROM test
              GROUP BY idmembre, idsite
         ) AS test_max
              ON test_min.idmembre=test_max.idmembre
              AND test_min.idsite=test_max.idsite
              AND maxi-mini > 20
    Elle retourne les couples (idmembre/idsite) pour lesquels la durée est supérieur à 20 secondes.
    Il y a surement des détails à modifier, là je ne compare que le plus petit timestamp avec le plus grand.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le probleme c'est que ce n'est effectivement pas seulement le plus petit et le plus grand qu'il faut comparer.
    Ca m'a donné une idée :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM `test` a 
    JOIN (SELECT * FROM test) b 
    WHERE b.timestamps - a.timestamps > 0 AND b.timestamps - a.timestamps < 20
    ca donne toutes les lignes qui ont un ecart inférieur a 20.

    Le problème est que si tu veux verifier qu'un utilisateur est resté sur le site, il te faut non pas les ecarts inférieurs à xx secondes mais ceux superieurs.
    Et d'autre part la methode ne verifiant pas que les deux lignes sont consécutives, cela validerait un utilisateur qui s'est connecté 1s la semaine derniere et 1s aujourd'hui (ce qui donnerait un ecart d'une semaine).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/04/2012, 00h25
  2. [Débutant] Vérifier l'existence d'une valeur dans une base MySql
    Par Invité dans le forum VB.NET
    Réponses: 11
    Dernier message: 07/08/2011, 16h09
  3. champ interval dans mysql
    Par acipeg dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/12/2006, 11h44
  4. Changements de colonnes dans une BDD MySQL
    Par arnaud_verlaine dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2003, 11h33
  5. Peut on mettre une image dans une BD MySQL ?
    Par maddog2032 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/07/2003, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo