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

SQL Procédural MySQL Discussion :

[MySQL 5.0] Requête complexe


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut [MySQL 5.0] Requête complexe
    Bonjour

    Je suis en train d'essayer de faire un jeu en ligne pour m'améliorer en PHP, et je bloque sur un point.

    Je vous explique la situation vite fait : un bâtiment peut nécessiter, pour être débloqué, un ou plusieurs autres batiments (pré requis donc)
    exemple concret : pour construire le batiment 5 il me faut les bâtiments 2 et 4, ainsi qu'une technologie particulière.

    J'ai donc fait cette structure de tables :


    Mais je n'arrive pas à voir quelle requête me permettrai d'avoir le nom du bâtiment en question, + le nom de ses bâtiments prérequis, + le nom des technologies prérequises

    Merci d'avance pour votre aide

    ps : si vous avez une autre idée de structure de tables ça me va aussi
    ps2 : peut-on réellement faire tout ça en une requête ?

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    Citation Envoyé par stargatefan
    ps : si vous avez une autre idée de structure de tables ça me va aussi
    là ça me va, les tables ont l'air t'être bien structurées

    Citation Envoyé par stargatefan
    ps2 : peut-on réellement faire tout ça en une requête ?
    je ne crois pas parce que à partir d'un "id_batiment" tu as un liste de bâtiments requis et une liste de technologie requis donc ça fait 2 types d'objets différents

    mais suivant le SGBD que tu utilises (MySQL ?) et la version, tu as peut-être à disposition des fonctions avancées pour faire une "union" des 2 requêtes en une seule

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    Merci pour ta réponse mais je ne vois pas trop comment me servir des Unions.
    Etant donné que tous les résultats sont "collés" les uns aux autres, comment différencier ce qui appartient à chaque bâtiment ?

    ps : j'ai bien MySQL 5

  4. #4
    Membre éclairé
    Inscrit en
    Août 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 49
    Par défaut
    Bonjour,

    Comme je suis pas un pro en sql et qu'il faut le travailler, je me suis dit voilà un bon challenge...

    J'ai supprimé les id pour les prérequis des bâtiments car je vois pas à quoi ça peu servir.
    La base que j'ai utilisé:
    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
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    -- phpMyAdmin SQL Dump
    -- version 2.9.1.1
    -- http://www.phpmyadmin.net
    -- 
    -- Serveur: localhost
    -- Généré le : Jeudi 12 Juillet 2007 à 01:37
    -- Version du serveur: 5.0.27
    -- Version de PHP: 5.2.0
    -- 
    -- Base de données: `test`
    -- 
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `batiments`
    -- 
     
    CREATE TABLE `batiments` (
      `id_batiment` int(10) unsigned NOT NULL auto_increment,
      `nom_batiment` varchar(40) NOT NULL,
      UNIQUE KEY `nom_batiment` (`nom_batiment`),
      KEY `id` (`id_batiment`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
     
    -- 
    -- Contenu de la table `batiments`
    -- 
     
    INSERT INTO `batiments` (`id_batiment`, `nom_batiment`) VALUES 
    (1, 'bat1'),
    (2, 'bat2'),
    (3, 'bat3'),
    (4, 'bat4'),
    (5, 'bat5'),
    (6, 'bat6'),
    (7, 'bat7'),
    (8, 'bat8'),
    (9, 'bat9'),
    (10, 'bat10');
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `batiments_requis`
    -- 
     
    CREATE TABLE `batiments_requis` (
      `id_batiment` int(11) unsigned NOT NULL,
      `id_batiment_requis` int(11) unsigned NOT NULL,
      KEY `id_batiment` (`id_batiment`,`id_batiment_requis`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    -- 
    -- Contenu de la table `batiments_requis`
    -- 
     
    INSERT INTO `batiments_requis` (`id_batiment`, `id_batiment_requis`) VALUES 
    (5, 2),
    (5, 4);
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `technologies`
    -- 
     
    CREATE TABLE `technologies` (
      `id_technologie` int(11) unsigned NOT NULL auto_increment,
      `nom_technologie` varchar(40) NOT NULL,
      UNIQUE KEY `nom` (`nom_technologie`),
      KEY `id_technologie` (`id_technologie`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
     
    -- 
    -- Contenu de la table `technologies`
    -- 
     
    INSERT INTO `technologies` (`id_technologie`, `nom_technologie`) VALUES 
    (1, 'tech1'),
    (2, 'tech2'),
    (3, 'tech3'),
    (4, 'tech4'),
    (5, 'tech5'),
    (6, 'tech6'),
    (7, 'tech7'),
    (8, 'tech8'),
    (9, 'tech9'),
    (10, 'tech10');
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `technologies_requises`
    -- 
     
    CREATE TABLE `technologies_requises` (
      `id_batiment` int(11) unsigned NOT NULL,
      `id_technologie_requise` int(11) unsigned NOT NULL,
      KEY `id_technologie` (`id_batiment`,`id_technologie_requise`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    -- 
    -- Contenu de la table `technologies_requises`
    -- 
     
    INSERT INTO `technologies_requises` (`id_batiment`, `id_technologie_requise`) VALUES 
    (5, 9);
    voilà la requete qui permet d'avoir les nom des batiments et des techno necessaire pour le batiment 5 (j'ai utiliser ton exemple et la techno 9)
    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
    15
    SELECT `nom_batiment`
    FROM batiments
    WHERE `id_batiment` IN (
      SELECT `id_batiment_requis`
      FROM batiments_requis
      WHERE `id_batiment` = 5 )
    
    UNION
    
    SELECT `nom_technologie` 
    FROM technologies
    WHERE `id_technologie` IN (
      SELECT `id_technologie_requise`
      FROM technologies_requises
      WHERE `id_batiment` = 5 )
    Résultat:
    nom_batiment
    bat2
    bat4
    tech9
    Pour le nom du batiment dont tu souhaite connaitre les prérequis, je pense que ce serait mieux a part...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    Salut,

    merci d'avoir pris de ton temps pour m'aider

    En fait je me suis mal exprimé. Ce n'est pas tout à fait ce que j'aimerai faire. Je m'explique mieux : il y a une liste de bâtiments (comme tu as fait) qui ont chacun 0, 1 ou plusieurs pré requis (bâtiment ou technologiques). Jusque là ok. Mais ce que je voudrais faire c'est afficher une liste de tous les bâtiments avec leurs pré requis. C'est pour ça qu'à mon avis l'UNION ne peut pas être utilisé ici (je pense, c'est la 1ère fois que je m'en sert). Parce que sinon, comment distinguer quels sont les pré requis de quel bâtiment ?!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    Petit up svp, je vois toujours pas comment faire

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

Discussions similaires

  1. Requête et sous-requête complexes - limites de MySQL
    Par flashguitou dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/06/2014, 02h23
  2. Requête complexe MySQL
    Par fre3d0m dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/03/2009, 19h27
  3. [MySQL] Conception de deux requêtes complexes
    Par Vesta dans le forum Langage SQL
    Réponses: 20
    Dernier message: 24/07/2007, 17h53
  4. [MySQL 4] Requête complexe.
    Par prgasp77 dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/04/2007, 21h25
  5. Requête complexe mySQL
    Par sonic64 dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/04/2007, 15h54

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