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 :

Récuperer seulement un résultat lors d'une jointure selon valeur dans un champ


Sujet :

Requêtes MySQL

  1. #1
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut Récuperer seulement un résultat lors d'une jointure selon valeur dans un champ
    Bonjour,

    Je sollicite votre aide pour savoir si ce que je veux faire est possible.

    Je récupère une liste de commentaires avec une requête et des jointures.
    Puis pour chaque résultat j'exécute une nouvelle requête pour récupérer le groupe le plus important de l'utilisateur

    J'aimerais dans la première requête la récupération du groupe de l'utilisateur, mais je doute que cela soit possible aussi je souhaiterais votre avis.

    Car actuellement pour récupérer 20 commentaires j'ai une requête puis 20 requêtes pour récupérer le groupe de l'utilisateur avec la plus haute importance ...

    Je vous remercie par avance pour votre aide.

    Table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE TABLE IF NOT EXISTS `avdev_groups` (
      `id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
      `name` varchar(20) NOT NULL COMMENT 'it''s translated in code',
      `description` varchar(100) NOT NULL,
      `importance` int(11) NOT NULL DEFAULT '0' COMMENT 'higher is better',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `avdev_users_groups`
    --
     
    DROP TABLE IF EXISTS `avdev_users_groups`;
    CREATE TABLE IF NOT EXISTS `avdev_users_groups` (
      `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `user_id` int(11) UNSIGNED NOT NULL,
      `group_id` mediumint(8) UNSIGNED NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `uc_users_groups` (`user_id`,`group_id`),
      KEY `fk_users_groups_users1_idx` (`user_id`),
      KEY `fk_users_groups_groups1_idx` (`group_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2593 DEFAULT CHARSET=utf8;
    pour récupérer le groupe utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `avdev_groups`.`name` FROM `avdev_users_groups` JOIN `avdev_groups` ON `avdev_users_groups`.`group_id`=`avdev_groups`.`id` WHERE `avdev_users_groups`.`user_id` = '2' ORDER BY `avdev_groups`.`importance` DESC limit 1;
    données dans ma table avdev_groups :
    id name description importance
    1 admin Administrator 5
    2 members General User 1
    4 customers Customers 2
    5 customersmc Customers My Club 3
    6 customersmcp Customers My Club Premium 4
    7 customerswc3d Customers Wine Cellar 3D 3
    8 customerswc3dp Customers Wine Cellar 3D Premium 4
    données dans ma table avdev_users_groups :
    id user_id group_id
    2588 2 1
    2589 2 2
    2590 2 5
    2591 2 6
    2592 2 7
    donne :
    name
    admin


    Table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    --
    -- Structure de la table `avdev_ticket_category`
    --
    CREATE TABLE `avdev_ticket_category` (
      `id` int(11) NOT NULL,
      `category_en` varchar(200) NOT NULL DEFAULT '',
      `category_fr` varchar(200) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `avdev_ticket_priorities`
    --
    CREATE TABLE `avdev_ticket_priorities` (
      `id` int(10) NOT NULL,
      `priority_en` varchar(200) NOT NULL DEFAULT '',
      `priority_fr` varchar(200) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `avdev_ticket_status`
    --
    CREATE TABLE `avdev_ticket_status` (
      `id` int(10) NOT NULL,
      `status_en` varchar(200) NOT NULL DEFAULT '',
      `status_fr` varchar(200) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `avdev_ticket_tickets`
    --
    CREATE TABLE `avdev_ticket_tickets` (
      `id` int(10) NOT NULL,
      `iduser` int(10) NOT NULL,
      `subject` varchar(200) NOT NULL,
      `body` text NOT NULL,
      `idpriority` int(10) NOT NULL,
      `idstatus` int(10) NOT NULL,
      `idcategory` int(10) NOT NULL,
      `attachment` varchar(200) DEFAULT NULL,
      `datecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `ispublic` tinyint(1) NOT NULL DEFAULT '0',
      `language` varchar(2) NOT NULL DEFAULT 'en'
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `avdev_users`
    --
    CREATE TABLE `avdev_users` (
      `id` int(11) UNSIGNED NOT NULL,
      `ip_address` varchar(45) NOT NULL,
      `username` varchar(100) NOT NULL,
      `password` varchar(255) NOT NULL,
      `salt` varchar(255) DEFAULT NULL,
      `email` varchar(254) NOT NULL,
      `activation_code` varchar(40) DEFAULT NULL,
      `forgotten_password_code` varchar(40) DEFAULT NULL,
      `forgotten_password_time` int(11) UNSIGNED DEFAULT NULL,
      `remember_code` varchar(40) DEFAULT NULL,
      `created_on` int(11) UNSIGNED NOT NULL,
      `last_login` int(11) UNSIGNED DEFAULT NULL,
      `active` tinyint(1) UNSIGNED DEFAULT NULL,
      `first_name` varchar(50) DEFAULT NULL,
      `last_name` varchar(50) DEFAULT NULL,
      `company` varchar(100) DEFAULT NULL,
      `phone` varchar(20) DEFAULT NULL,
      `openid` text NOT NULL,
      `newsletter` tinyint(1) DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ma requête pour récupérer les commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `t`.`id` as `id`, `t`.`iduser` as `iduser`, `t`.`subject` as `subject`, `t`.`body` as `body`, `t`.`idpriority` as `idpriority`, `t`.`idstatus` as `idstatus`, `t`.`idcategory` as `idcategory`, `t`.`attachment` as `attachment`, UNIX_TIMESTAMP(t.datecreated) as datecreated, `t`.`ispublic` as `ispublic`, `t`.`language` as `language`, `p`.`priority_fr` as `priority`, `s`.`status_fr` as `status`, `c`.`category_fr` as `category`, `u`.`username` as `username` FROM `avdev_ticket_tickets` AS `t` LEFT JOIN `avdev_ticket_priorities` AS `p` ON `t`.`idpriority` = `p`.`id` LEFT JOIN `avdev_ticket_status` AS `s` ON `t`.`idstatus` = `s`.`id` LEFT JOIN `avdev_ticket_category` AS `c` ON `t`.`idcategory` = `c`.`id` LEFT JOIN `avdev_users` AS `u` ON `t`.`iduser` = `u`.`id` WHERE `t`.`id` = '2'
    J'ai beau me creuser la tête je ne vois pas comment faire à par rajouter un champs dans la table user avec l'id de la categorie principal et faire une jointure comme pour status etc
    ce qui complique mon code car après faut gerer lors de l'effacement modification des groupes alors que la c'est mysql qui gère.

    Merci pour votre aide
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  2. #2
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    Trouvé, j'ai fait un subselect dans un join.
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

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

Discussions similaires

  1. [MySQL-5.7] Insérer une liste de valeurs dans 1 champ
    Par henneka dans le forum Requêtes
    Réponses: 7
    Dernier message: 26/04/2017, 13h45
  2. Probleme de résultats lors d'une création de vue
    Par Devilstuff dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/02/2011, 13h45
  3. Doublons sur le résultat lors d'une jointure de 3 tables
    Par kevinh44fr dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/01/2011, 17h17
  4. Obtenir un COUNT() = 0 lors d'une jointure ?
    Par elvex dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/07/2007, 21h48
  5. Utiliser un tableau de résultat pour faire une jointure
    Par Xavier1979 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/06/2007, 13h27

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