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 :

requête un peu complexe pour moi


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 20
    Points
    20
    Par défaut requête un peu complexe pour moi
    'soir tout le monde.

    Voilà 3 heures que je cherche (avec ma tête, google et ce forum) sans trouver de solution, je vous la fait courte :
    1 table
    id_index , id_index_parent , rien_a_voir
    1 , 0 , blabla
    2 , 1 , blabla
    3 , 1 , blabla
    4 , 0 , blabla
    5 , 4 , blabla
    ...
    ...

    id_index : index unique auto-incrémenté
    id_index_parent : index pouvant pointer vers id_index si id_index à un lien de parenté, si aucun lien de parenté alors 0
    rien_a_voir : juste pour le fun.

    c'est un peu comme un système de catégorie + sous-catégories, le tout dans la même table.

    Ce que j'essaie de faire en 1 requête :
    sortie les 10 derniers id_index en associant les XX id_index_parent éventuellement associés.

    J'ai essayé avec des jointures, des requêtes imbriquées, mais rien n'y fait, le LIMIT 10 me bloque et me sort toujours 10 résultats même si il y a (par exemple) 20 id_index_parent associés.

    Si quelqu'un peut au moins m'aiguiller un peu, ça serait cool ;)
    Merci.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 032
    Points : 23 767
    Points
    23 767
    Par défaut
    Je ne comprends pas exactement ce que tu souhaites en sortie de requête...
    Un petit exemple ?
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    @jeca : Merci pour le lien, je l'avais déjà parcouru, mais je n'y trouve pas de solution (toujours ce problème de limit) :/

    @ced : mea culpa, j'aurais dû préciser.

    En fait je voudrais mettre une limite sur les parents mais pas sur les enfants.
    en gros avec un limit 3 DESC sur :
    id_index , id_index_parent , rien_a_voir
    1 , 0 , blabla1
    2 , 1 , blabla2
    3 , 1 , blabla3
    4 , 0 , blabla4
    5 , 1 , blabla5
    6 , 4 , blabla6
    7 , 0 , blabla7

    en sortie le limit 3 s'applique sur l'id_index ayant un id_index_parent = 0 et dans la même requête, sortir sans limite les champs ayant les id_index_parent associés id_index sortant :
    7 , 0 , blabla7 // assujetti au limit 3
    4 , 0 , blabla4 // assujetti au limit 3
    6 , 4 , blabla6 // id_index_parent = id_index = 4 // non assujetti au limit 3
    1 , 0 , blabla1 // assujetti au limit 3
    5 , 1 , blabla5 // id_index_parent = id_index = 1 // non assujetti au limit 3
    3 , 1 , blabla3 // id_index_parent = id_index = 1 // non assujetti au limit 3
    2 , 1 , blabla2 // id_index_parent = id_index = 1 // non assujetti au limit 3

    les "enfants" peuvent sortir dans le "fil" des parents ou sortir avant ou après les parents :
    7 , 0 , blabla7 // assujetti au limit 3
    4 , 0 , blabla4 // assujetti au limit 3
    1 , 0 , blabla1 // assujetti au limit 3
    6 , 4 , blabla6 // id_index_parent = id_index = 4 // non assujetti au limit 3
    5 , 1 , blabla5 // id_index_parent = id_index = 1 // non assujetti au limit 3
    3 , 1 , blabla3 // id_index_parent = id_index = 1 // non assujetti au limit 3
    2 , 1 , blabla2 // id_index_parent = id_index = 1 // non assujetti au limit 3

    Pour l'instant, j’extrais tout les champs de la table et applique la limite en php (boucle dans boucle), ça fonctionne, mais cette table est appelée à avoir des milliers d'enregistrements et ça va devenir très lourd ...

    En tout cas merci pour vos réponses.

  5. #5
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    c'est simple en fait, tu peux le faire avec ça :
    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
    drop procedure trouve;
    delimiter |
    create procedure trouve()
    begin
    drop table if exists principaux;
    create temporary table principaux select id from ta_table where tes_conditions limit 10;
    (select tes_champs from ta_table where id
    in (select id from principaux))
    union
    (select tes champs from ta_table where id_index_parent
    in (select id from principaux));
    drop table principaux;
    end|
    delimiter ;

    tu appelles avec un call ta procédure... et du coup tout le traitement se passe côté serveur mysql pas d'aller-retour inutiles

    tes_conditions représente ce que tu cherches, à toi de remplacer avec ce qui va bien...
    tes_champs représente la liste des champs que tu veux afficher, à toi de remplacer par ce qu'il faut...

    tu peux aussi faire la même chose en une seule requête mais ça serait, je pense, moins performant, car tu devrais refaire 2 fois la recherche des id des 10 éventuels résultats principaux. Là, tu ne la fais qu'une fois...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Pas bête
    Je teste ça ce soir et je cloture si c'est ok

    En tout cas, merci pour le coup de main

Discussions similaires

  1. [MCD] Gestion des primes un peu complexe pour moi
    Par wallash dans le forum Schéma
    Réponses: 3
    Dernier message: 17/09/2010, 16h00
  2. Réponses: 5
    Dernier message: 12/12/2009, 14h28
  3. requête un peu complexe pour moi (delete + distinct + max)
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/08/2008, 12h38
  4. Requete concernant des dates un peu complexe (pour moi)
    Par fayred dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/02/2008, 08h26
  5. Gérer un Formulaire un peu complexe pour moi
    Par budylove dans le forum Langage
    Réponses: 3
    Dernier message: 17/05/2006, 10h01

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