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

Langage PHP Discussion :

Requête particulière(ment douloureuse ?)


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Requête particulière(ment douloureuse ?)
    Bonsoir à vous !

    Je me permet de vous présenter mon problème, débutant en PHP je dispose d'une réflexion limitée qui m'empêche de réaliser certaines choses >w<

    Je souhaiterais effectuer une requête particulière dont la table en question dispose d'un champ "last_message" de type TIME. Au début mon but était de récupérer uniquement les noms d'utilisateurs dont le dernier message était récent d'au plus tard dix minutes. J'ai donc tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $usrlst = $bdd->query("SELECT usrname FROM ms_chat_usrlst WHERE last_message BETWEEN 'CURTIME()' AND 'CURTIME() - 00:10:00'") or die(print_r($bdd->errorInfo()));
    Malheureusement inefficace, en faisant le test aucun utilisateur n'est affiché alors que leur message se trouve théoriquement dans la bonne plage de temps.

    Bon c'est sûr je dois être bien à côté de la plaque, c'est ce que je craint >w< !

    Si vous pouviez m'éclaircir, j'en serais vraiment ravi ;3 !

    PS : Oui, à la base ceci est pour la réalisation d'un chat entre amis qui accepterais éventuellement les invités mais la route est encore longue : (

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    j'ai rgardé, et je me demande comment tu fais pour différencier les messages du 11-01-2011 et 13-01-2011, étant donnée que tu compare les heures?

    à la limite tu devrais peu être utiliser un timestamp UNIX ( Ce timestamp est un entier long, contenant le nombre de secondes entre le début de l'époque UNIX (1er Janvier 1970 00:00:00 GMT) et le temps spécifié ), pour le champs date, comme ca tu aurais toutes les infos sur l'année le mois le jour l'heure la minute la seconde, de l'enregistrement du message, et cela tout en 1

    tu pourra comme cela très facilement comparer 2 timestamp et en extraire les messages de moins de 10 min

  3. #3
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Je ferais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT usrname FROM ms_chat_usrlst WHERE (CURTIME() - last_message)< 10
    voir le résultat de la différence à adapter
    Je pencherais à 1000 si on convertit en numérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE ((CURTIME() - last_message)+0)< 1000

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Je vois : ) A vrai dire je me suis encore jamais servi de timestamp, sauf pour créer un cookie et j'aimerais donc bien en savoir plus, je vais regarder de plus près, je vous tiendrais au courant, merci !

    Edit : Ok j'essayerais cette méthode aussi c'est toujours ça d'appris, merci : D!

  5. #5
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Si tu peux modifier le type time en timestamp dans ta base, c sûr que c plus simple ...

    Si tu peux réaliser le calcul avec curtime() et que ça marche, j'aimerais bien connaître le résultat aussi

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    J'ai essayé, mais dans tous les cas j'ai soit personne d'affiché ou je suis affiché alors même que mon message soit périmé ( > 10 minutes )

    Tout ça pour dire que mon but était en fait d'auto-delester les utilisateurs inactifs de plus de dix minutes >w<

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Tu fais avec quoi comme méthode, les timestamp ou le curtime()

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Et bien, avec le curtime(), par contre j'ai passé le champ sql en TIMESTAMP, il existe donc une méthode pour récupérer le timestamp de ce champ et de le différencier avec celui de maintenant je suppose ?

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Avec timestamp, tu peux utiliser mktime (voir manuel php) et ce serait un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $timeStampDeBase = mktime("0000-00-00 00:00"); // A arranger
    // Enlever les dix minutes
    $query = mysql_query("SELECT ... FROM ... WHERE champTS > $timeStampBase");

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Je dois vraiment être nul >w< J'arrive pas à arranger le timestamp, je crois que je vais changer de méthode et utiliser des $_SESSION pour définir si la personne ne semble plus sur la page T_T Je me complique bien trop la vie x)

  11. #11
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Et le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $timeStampDeBase = mktime(date("H"), date("i"), date("s")); //ça devrait le faire
    // Enlever les dix minutes
    $timeStampDeBase -= 600;
    $query = mysql_query("SELECT ... FROM ... WHERE champTS > $timeStampBase");
    C pas bon ?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Pour une raison que j'ignore, ça ne veut pas marcher T_T l'utilisateur est toujours affiché quoi qu'on fasse >w<

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    tu peu utiliser time() aussi

    http://www.php.net/manual/fr/function.time.php

  14. #14
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Tu peux tjs afficher le timestamp qui a été mis dans la base de donnée en utilisant ton SELECT et compare avec $timeStampDeBase ...

    Peut être qu'il faut définir différement le mktime (j'ai pas essayé) ou utiliser time comme indiqué Ascito ...

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Exact ça fonctionne aussi avec time(), hélas rien ne change é_è Voici le code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    /* Liste des utilisateurs actifs. */
    $tps = time();
    $tps -= 600;
     
    $usrlst = $bdd->query("SELECT usrname FROM ms_chat_usrlst WHERE last_message > $tps") or die(print_r($bdd->errorInfo()));
      while ($donnees = $usrlst->fetch()) { ?>
    	  <div class="usrdta"><p><font color="green">▪</font> <?php echo htmlspecialchars($donnees['usrname']); ?></p></div>
      <?php
      }
      $usrlst->closeCursor();
    ?>

  16. #16
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Essayes ça pour voir comment ça se déroule et corrige en fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    /* Liste des utilisateurs actifs. */
    $tps = time();
    $tps -= 600;
    echo $tps
     
    $usrlst = $bdd->query("SELECT usrname FROM ms_chat_usrlst") or die(print_r($bdd->errorInfo()));
      while ($donnees = $usrlst->fetch()) { 
           echo $donnees['usrname']; 
           echo $donnees['Le TS correspondant']); 
      }
      $usrlst->closeCursor();
    ?>

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Je commence à mieux comprendre le timestamp mais pas suffisamment encore xD

    Voici ce que j'ai :

    1339077052 (qui vient de : echo $tps; )
    nomUtilisateur (ok)
    2012-06-07 14:01:22 (ceci doit poser problème, pourquoi est ce que je récupère ça alors que mon champ SQL est de type timestamp ?)

  18. #18
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Dans un premier temps tu peux tjs faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    /* Liste des utilisateurs actifs. */
    $tps = time();
    $tps -= 600;
     
    $usrlst = $bdd->query("SELECT usrname FROM ms_chat_usrlst") or die(print_r($bdd->errorInfo()));
      while ($donnees = $usrlst->fetch()) { 
           $tpsBd = mktime ( $donnees['Le TS correspondant']) ); 
           if( $tpsBd > $tps ) { // utilisateur ok } else { // non ok }
      }
      $usrlst->closeCursor();
    ?>
    Je cherche sur la requête

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Il y a du progrès, PHP m'a renvoyé une insulte ce coup ci xD !

    Notice: A non well formed numeric value encountered in C:\wamp\www\site\tp2\index.php on line 102

    Sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tpsBd = mktime ( $donnees['last_message']);

  20. #20
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Désolé, je pensais que allait décomposer ce champ

    Il faut décomposer la valeur de $donnees['Le TS correspondant']) qui de format 2012-06-07 14:01:22 en argument pour la fonction mktime telle que
    mktime( hh, mm, ss, MM, DD, YY); pour avoir un Timestamp

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Requête particulière UPDATE sur deux serveurs
    Par Ambuletz dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/05/2010, 10h01
  2. Cherche Requête particulière
    Par Mike888 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/02/2010, 21h42
  3. Interprétation variable dans requête particulière
    Par Chris_fr7 dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2009, 22h19
  4. Requêtes particulières avec hibernate
    Par carnifex dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/12/2008, 00h22
  5. Requête particulière dans un état
    Par NooD dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/07/2006, 16h58

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