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

Requêtes MySQL Discussion :

condition pour une session


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut condition pour une session
    Bonsoir, je fais actuellement plusieurs table pour un système de session.
    Je souhaite retourné si un utilisateurs est en ligne ou non.
    Mais une condition directement dans la requête SQL m'aiderai pour retourné si l'utilisateur enregistré est actuellement en ligne (pour joindre une image)
    J'ai fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT pr.idadmin, pr.pseudo,session.connex
    FROM mc_admin_member pr
    JOIN (SELECT if(userid,1,0) as connex FROM mc_admin_session) LEFT JOIN mc_admin_session session ON(pr.idadmin = session.userid)
    LEFT JOIN mc_admin_perms perm ON ( perm.idadmin = pr.idadmin )
    Seulement j'ai un probléme avec cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JOIN (SELECT if(userid,1,0) as connex FROM mc_admin_session) LEFT JOIN mc_admin_session session ON(pr.idadmin = session.userid)
    En gros je souhaite simplement qu'il me retourne toutes les personnes inscrite avec une colonne particulière qui indiquerai s'il est en ligne (connex)
    Donc juste indiquer si un champ existe avec l'identifiant il retourne connex 1 sinon 0

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    La première jointure n'a pas de condition de jointure et il n'y a pas d'alias pour nommer la sous-requête.

    A quoi sert la dernière jointure puisque aucune colonne de mc_admin_perms n'est utilisée ?

    La colonne userid de la table mc_admin_session indique si l'utilisateur est en ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT pr.idadmin, pr.pseudo,
      CASE session.userid
        WHEN 1 THEN 'Connecté'
        ELSE 'Non connecté'
      END AS connex
    FROM mc_admin_member pr
    LEFT JOIN mc_admin_session session ON pr.idadmin = session.userid
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    oh merci j'ai apris quelque chose, je n'avais jamais utilisé cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE session.userid
    WHEN 1
    THEN 1
    ELSE 0
    END
    Voila ma requête modifié avec la table perms, il faut vraiment que je trouve une bonne doc quand j'ai des souci comme sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT pr.idadmin, pr.pseudo, p.perms,
    CASE session.userid
    WHEN 1
    THEN 1
    ELSE 0
    END AS connex
    FROM mc_admin_member pr
    LEFT JOIN mc_admin_session
    SESSION ON ( pr.idadmin = session.userid )
    LEFT JOIN mc_admin_perms p ON ( p.idadmin = pr.idadmin )
    Mais une question pour nourrir cette curiosité aurai je pu faire la même chose avec un IF ou IFNULL ?

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    Citation Envoyé par gtraxx Voir le message
    Mais une question pour nourrir cette curiosité aurai je pu faire la même chose avec un IF ou IFNULL ?
    salut,

    oui, tu devrais avoir le même résultat avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT pr.idadmin, pr.pseudo, p.perms,if (session.userid = 1, 1,0) AS connex
    FROM mc_admin_member pr
    LEFT JOIN mc_admin_session
    SESSION ON ( pr.idadmin = session.userid )
    LEFT JOIN mc_admin_perms p ON ( p.idadmin = pr.idadmin )
    mais, c'est mieux d'utiliser le case... au cas ou tu changes de SGBD un jour

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    J'ai quand même un souci avec la requête elle me retourne toujours 0 pour les usagers sauf celui avec lidentifiant 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT pr.idadmin, pr.pseudo, p.perms,
    				CASE session.userid
    				WHEN 1
    				THEN 1
    				ELSE 0
    				END AS connex
    				FROM mc_admin_member pr
    				LEFT JOIN mc_admin_session session
    			  	ON ( pr.idadmin = session.userid )
    				LEFT JOIN mc_admin_perms p ON ( p.idadmin = pr.idadmin )
    Sa viens surement de sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CASE session.userid
    WHEN 1
    Donc tout le monde à dans le paramètre connex toujours 0 sauf celui qui à le numéro 1.
    la table session contient uniquement un champs avec l'identifiant si celui-ci est connecté mais la table membres le contient toujours logique.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ca m'avait aussi étonné que la condition se fasse sur une colonne appelée userid !

    Si je comprends bien, l'utilisateur ne se trouve dans la table mc_admin_session que s'il est connecté ?

    La jointure externe va entraîner la mise à NULL des colonnes de la table mc_admin_session pour les utilisateurs non connectés.

    Si tu veux afficher 1 s'il est connecté et 0 sinon, il faut tester le NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT pr.idadmin, pr.pseudo, p.perms,
      CASE session.userid
        WHEN IS NULL THEN 0
        ELSE 1
      END AS connex
    FROM mc_admin_member pr
    LEFT JOIN mc_admin_session session ON pr.idadmin = session.userid
    LEFT JOIN mc_admin_perms p ON p.idadmin = pr.idadmin
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer la date pour une session ?
    Par strikerm59 dans le forum SQL
    Réponses: 1
    Dernier message: 28/03/2008, 18h29
  2. pour une session, une résolution d'ecran différente
    Par riemp dans le forum Windows XP
    Réponses: 11
    Dernier message: 15/07/2007, 20h08
  3. [Sécurité] Pb PHP pour une session membre
    Par fredylover dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2006, 08h59
  4. [MySQL] Condition pour une Requete sql vide
    Par needles94000 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/03/2006, 18h03
  5. Ajouter une clé pour une session non ouverte
    Par prgasp77 dans le forum Windows
    Réponses: 4
    Dernier message: 29/10/2005, 00h26

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