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 :

SELECTION DANS UNE TABLE AVEC PLUSIEURS RELATIONS


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Points : 43
    Points
    43
    Par défaut SELECTION DANS UNE TABLE AVEC PLUSIEURS RELATIONS
    Bonsoir à tous,

    Je suis bloquer au niveau de ma sélection, pour bien vous expliquer je mets ici mes tables, j'ai trois tables dans ma base des données dont : infoplus_news, infoplus_country et infoplus_zone, les deux tables infoplus_country et infoplus_zone sont en relation avec la table infoplus_news, la table infoplus_country représente la table des pays mais elle est aussi en relation avec la table infoplus_zone ce qui fait que un pays appartient à une zone quelcon (ex pays : Congo, ex zone: Afrique Centrale) donc l'ID de la table infoplus_zone est représenté dans la table infoplus_country

    alors moi je fais ma requete de selection dans la table infoplus_news mais je voudrais selecrtionner seulement les pays dont l'ID de la zone correspond à l'ID de la zone que j'ai placé dans ma requette, j'ai tanté d'utiliser les JOIN mais j'ai eu des maux de ventre, merci aussi de me proposer

    Je ne sais pas si vous allez comprendre mon explication mais je vous donne quand meme ma requette et tous mes tables :

    Ceci est ma selection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id_news, titre_news, contenu_news, min_picture, publish_statut, infoplus_country.country_name AS country_name, infoplus_category.category_name AS category_name
    FROM infoplus_news, infoplus_country, infoplus_category
    WHERE infoplus_country.id_country = infoplus_news.country_id
    AND infoplus_category.id_cat = infoplus_news.category AND zone_id =1 AND id_zone =1
    Et voici mes tables :

    infoplus_country

    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
    CREATE TABLE IF NOT EXISTS `infoplus_country` (
      `id_country` int(11) NOT NULL AUTO_INCREMENT,
      `country_name` varchar(45) DEFAULT NULL,
      `tower_counrty` varchar(150) NOT NULL,
      `president` varchar(150) NOT NULL,
      `governement_chief` varchar(150) NOT NULL,
      `superficie` varchar(150) NOT NULL,
      `languages` varchar(150) NOT NULL,
      `population` varchar(250) NOT NULL,
      `flag_country` varchar(250) NOT NULL,
      `id_zone` int(11) NOT NULL,
      `edded_byy` varchar(150) DEFAULT NULL,
      `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `edited` datetime NOT NULL,
      `edited_by` varchar(150) NOT NULL,
      PRIMARY KEY (`id_country`),
      UNIQUE KEY `id_country_2` (`id_country`),
      UNIQUE KEY `country_name_2` (`country_name`),
      KEY `id_zone` (`id_zone`),
      KEY `id_country` (`id_country`),
      KEY `country_name` (`country_name`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=56 ;
    infoplus_news

    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
    CREATE TABLE IF NOT EXISTS `infoplus_news` (
      `id_news` int(11) NOT NULL AUTO_INCREMENT,
      `titre_news` varchar(255) DEFAULT NULL,
      `file_content` varchar(150) NOT NULL,
      `contenu_news` longtext,
      `category` int(11) NOT NULL,
      `country_id` int(11) NOT NULL,
      `zone_id` int(11) DEFAULT NULL,
      `news_tag` varchar(250) NOT NULL,
      `publish_by` varchar(45) DEFAULT NULL,
      `cover_picture` varchar(250) DEFAULT NULL,
      `min_picture` varchar(250) NOT NULL,
      `publish_statut` tinyint(1) DEFAULT '0',
      `publish_date_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      `edited` datetime NOT NULL,
      `edited_by` varchar(150) NOT NULL,
      PRIMARY KEY (`id_news`),
      UNIQUE KEY `titre_news` (`titre_news`),
      KEY `country_id` (`country_id`),
      KEY `country_id_2` (`country_id`),
      KEY `category` (`category`),
      KEY `zone` (`zone_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

    infoplus_zone

    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
    CREATE TABLE IF NOT EXISTS `infoplus_zone` (
      `id_zone` int(11) NOT NULL AUTO_INCREMENT,
      `zone_news` varchar(150) DEFAULT NULL,
      `details_zone` varchar(150) NOT NULL,
      `added_by` varchar(150) NOT NULL,
      `edded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `edited_by` varchar(150) NOT NULL,
      `edit_date` datetime NOT NULL,
      PRIMARY KEY (`id_zone`),
      UNIQUE KEY `id_zone` (`id_zone`),
      UNIQUE KEY `zone_news` (`zone_news`),
      UNIQUE KEY `zone_news_2` (`zone_news`),
      UNIQUE KEY `zone_news_3` (`zone_news`),
      UNIQUE KEY `zone_news_4` (`zone_news`),
      UNIQUE KEY `zone_news_5` (`zone_news`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
    Merci de votre aide d'avance

  2. #2
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 599
    Points : 887
    Points
    887
    Par défaut
    utilise plutôt JOIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT id_news, titre_news, contenu_news, min_picture, publish_statut, co.country_name AS country_name, ca.category_name AS category_name
    FROM infoplus_news n
        LEFT JOIN infoplus_country co ON co.id_country = n.country_id
        LEFT JOIN infoplus_category ca ON ca.id_cat = n.category 
    WHERE co.id_zone ='1'
    Participez vous aussi !
    Message utile
    Discussion résolue

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    ca sert à rien de faire des jointures externe si on restreint la table jointe dans la clause where

  4. #4
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 599
    Points : 887
    Points
    887
    Par défaut
    punkoff a écrit
    ca sert à rien de faire des jointures externe si on restreint la table jointe dans la clause WHERE
    Oui tout à fait ...

    Code MYSQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT id_news, titre_news, contenu_news, min_picture, publish_statut, co.country_name AS country_name,
     ca.category_name AS category_name
    FROM infoplus_news n
        JOIN infoplus_country co ON co.id_country = n.country_id
        LEFT JOIN infoplus_category ca ON ca.id_cat = n.category 
    WHERE co.id_zone ='1'
    Participez vous aussi !
    Message utile
    Discussion résolue

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/05/2013, 22h40
  2. Réponses: 9
    Dernier message: 08/10/2010, 08h39
  3. Insert Into dans une table avec select
    Par smail25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2006, 13h06
  4. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 11h17
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 17h24

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