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 :

Selectionner des plages


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Par défaut Selectionner des plages
    Bonjour à tous,

    Je vais essayer d'expliquer mon problème le plus clairement possible.
    Voici tout d'abord ce que j'ai actuellement.

    Cela me sert pour la génération d'un menu avec arborescence :


    Voici la table SQL que j'ai pour obtenir le menu ci-dessus :

    Pour ceux qui souhaites le code SQL :
    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
    --
    -- Structure de la table `menus`
    --
     
    CREATE TABLE `menus` (
      `id` int(11) NOT NULL,
      `nom` varchar(250) NOT NULL,
      `visible` smallint(6) NOT NULL default '0',
      `lvl` int(11) NOT NULL,
      `cat` int(11) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `menus`
    --
     
    INSERT INTO `menus` (`id`, `nom`, `visible`, `lvl`, `cat`) VALUES
    (0, 'Acceuil', 1, 0, 0),
    (1, 'Forums', 1, 1, 3),
    (2, 'Chat', 1, 1, 4),
    (3, 'Tutoriels', 1, 1, 5),
    (4, 'Livres', 1, 1, 6),
    (5, 'F.A.Q.', 1, 1, 7),
    (6, 'Sources', 1, 1, 8),
    (7, 'C', 1, 0, 0),
    (8, 'Forums C', 1, 1, 9),
    (9, 'F.A.Q. C', 1, 1, 10),
    (10, 'Eclipse', 1, 0, 0),
    (11, 'ACCUEIL ECLIPSE', 1, 1, 11),
    (12, 'FORUMS ECLIPSE', 1, 1, 12),
    (13, 'FAQ ECLIPSE', 1, 1, 20),
    (14, 'TUTORIELS ECLIPSE', 1, 1, 13),
    (15, 'LIVRES ECLIPSE', 1, 1, 14),
    (16, 'BLOGS ECLIPSE', 1, 1, 15),
    (17, 'PC', 1, 0, 0),
    (18, 'ACCUEIL HARDWARE', 1, 1, 16),
    (19, 'FORUM HARDWARE', 1, 1, 17),
    (20, 'Sécurité', 1, 0, 0),
    (21, 'Accueil Sécurité', 1, 1, 18),
    (22, 'Forum Sécurité', 1, 1, 19);
    Si je souhaite faire un moteur de recherche, je souhaiterais que l'on puisse sélectionner une catégorie.

    Par exemple je souhaites rechercher dans toutes les sous catégories de la catégorie "C".
    Pour ceci je fais cela en deux fois.

    Je génère ce premier code SQL me permettant de sélectionner l'id supérieur à ma catégorie principale et de MÊME lvl (généré automatiquement avec mon code en PHP):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `id` FROM `menus` WHERE `lvl` = ( SELECT `lvl` FROM `menus` WHERE `id` = 7 ) AND `id` > 7 LIMIT 0, 1
    Ce qui me permet de trouver l'id : 10

    Ensuite je génère une autre code SQL sur une autre table pour aller chercher de nouvelles informations qui vont être affichées cette fois-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `id`, `type`, `titre`, `resume` FROM `files` WHERE `titre` COLLATE utf8_unicode_ci LIKE '%script%' AND `status` = 1 AND `type` > 7 AND `type` < 10 ORDER BY `id` DESC
    Ainsi en PHP je n'ai aucun problème pour le moment à afficher ce que je souhaite.

    Tout d'abord je souhaite savoir comment optimiser ces requêtes SQL sans changer les tables bien évidemment.

    La partie ou je bloque pour le moment est de pouvoir sélectionner PLUSIEURS catégories.

    -----------------------------------

    Si je sélectionne la catégorie la catégorie "C" et la catégorie "PC", je n'ai aucun soucis pour connaitre ces deux id et les envoyer, mais comment créer ma requête pour afficher ce qu'il me faut SANS avoir à faire ces mêmes requêtes pour CHAQUE catégorie ?
    Cela serait très lourd pour je suppose pas grand chose...

    Est-ce possible, je suppose que oui, mais je ne m'y connais pas assez pour cela en SQL.

    Auriez-vous une solution à mon petit soucis actuel ?

    Merci par avance.

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Je ne suis pas sûr d'avoir tout compris, mais une chose me tarabuste.
    Un menu est probablement la chose la moins variante qui soit, donc j'espère que la génération dynamique du menu n'est pas permanente mais qu'elle intervient seulement lorsqu'une modification est apportée à la table.

    Par ailleurs je ne vois pas, dans les colonnes de la table, comment s'opère la filiation.
    Je crois que tu devrais lire attentivement l'article de SQLPro afférent à la gestion d'arborescence avec SQL.
    http://sqlpro.developpez.com/cours/arborescence/
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Par défaut
    Pour le moment je suis en local pour mes tests donc "si" le menu est généré dynamiquement.
    Par la suite le menu sera mis en cache, mais pour le moment je suis sur ce problème.

    Le lien que tu m'as envoyé j'y ai pas mal bossé.
    Et je suis partit de cette "base", mais pour mon menu en PHP, cela ne me sert pas, trop complexifié pour ce dont j'ai besoin.

    Une simple requête SQL me permet d'afficher tout le menu sans problème.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/06/2006, 10h48
  2. Réponses: 2
    Dernier message: 21/04/2006, 12h09
  3. [VBA-E]Selectionner une plage et la fusionner
    Par arkazar dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/03/2006, 17h21
  4. [DATE] selectionner des dates
    Par hutchuck dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 03/12/2005, 14h11
  5. [DATE] selectionner des dates
    Par hutchuck dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/12/2005, 19h42

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