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 :

Requete sur un resultat d'une requete


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut Requete sur un resultat d'une requete
    Bonjour,

    Je vous présente mon contexte. J'ai une base de données contenant plusieurs tables :
    - des articles (description,...)
    - une table des champs de description des articles (idChamp, idArticle, Valeur)
    - des catégories
    - les relations entre catégories (relation parent enfant)
    - les relations entre catégories et articles
    - prix avec l'id sur l'article
    - rabais par catégorie et par article > pour user (idArt, idCat, idUser, rabais)

    Il y a peu de temps j'était incapable de faire autre chose qu'un SELECT FROM WHERE. Là j'ai lu les cours, et maintenant j'ai un (tout petit) peu avancé.

    Pour ressortir les prix par article j'ai écrit cette requete qui fonctionne bien.
    Ce qui est très important c'est de trier par ordre de prix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	SELECT L.`id`,`date`,`idSobi`,`idUser`,`prix`, `username`, `title`, LOC.`data_txt` AS localite, LAT.`data_txt` AS latitude, LNG.`data_txt` AS longitude
    	FROM `#__pecSsListing` L
    	LEFT JOIN `#__sobi2_item` S		ON L.idSobi = S.itemid
    	LEFT JOIN `#__users` U			ON L.idUser = U.id 
    	LEFT JOIN `#__sobi2_fields_data` LOC 	ON L.idSobi = LOC.itemid
    	LEFT JOIN `#__sobi2_fields_data` LAT 	ON L.idSobi = LAT.itemid
    	LEFT JOIN `#__sobi2_fields_data` LNG 	ON L.idSobi = LNG.itemid
    	{$where} AND LOC.fieldid = 3 AND LAT.fieldid = 25 AND LNG.fieldid = 24 
    	ORDER BY prix ASC, id DESC {$limit} ;" ;
    Maintenant ma grande difficulté est d'y intégrer mes rabais. Ces dernier dépendent d'une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RABAIS : id, idCat, idArticle (=idSobi), idUser, rabais
    Ce que je peux faire, c'est 1. faire une boucle en code en recherchant pour chaque article le rabais, déduire ce dernier au prix, et retrier mon vecteur.

    Pour récupérer les rabais j'ai ces requetes :

    Rabais par article :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT `rabais` FROM `#__pecSsRabais` WHERE `idSobi`='{$idSobi}' AND `idUser`='{$my->id}' LIMIT 1"
    Et par catégorie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // recherche de la catégorie :
    "SELECT I.`catid` FROM `#__sobi2_cat_items_relations` I LEFT JOIN `#__sobi2_cats_relations` R ON I.`catid`=R.`catid`  WHERE `itemid` ='{$idSobi}' AND R.`parentid`='{$this->m_idCatParentFournisseurs}' LIMIT 1"
     
    //requete ci dessus me donne idCatMarque
     
    // recherche du rabais
    $database->setQuery("SELECT `rabais` FROM `#__pecSsRabais` WHERE `idCat`='{$idCatMarque}' AND `idUser`='{$my->id}' LIMIT 1");
    Je ne sais pas si quelqu'un a eu le courage de me lire jusqu'ici, si oui je suis conscient qu'il est difficile de se plonger dans un environnement complexe.

    Questions :
    - Est il possible de corriger ma requete de base en y ajoignant les 3 requetes suivantes
    - Est il possible de faire 'une seconde passe' sur le résultat de ma première requete.

    Merci de me donner quelques pistes.

    ced_.

    PS : je travaille sur un environnement existant, je ne peux pas modifier la structure.

  2. #2
    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 034
    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 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Mise à part la complexité des noms de tables dans les requêtes , le problème, si j'ai bien compris, vient du fait qu'un article peut appartenir à plusieurs catégories (notamment par la relation parent-enfant entre catégories) et que, du coup, un même user peut avoir plusieurs rabais pour un même article ?

    ced

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut
    En fait les catégories sont structurées comme cela :
    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
     
     - Fabricants :
       - Sony
       - Dell
       - HP
     - Périfériques
        - scanners
        - appareils photos
             - boitiers
             - objectifs
        - souris
             - avec fil
             - sans fil
             - avec poils
     - Ordis
        - portables
        - desktop
     ...
    Chaque catégorie contient des articles.

    Et les rabais sont affectés soit aux articles. ET, aussi par marque. Donc toutes les catégories enfantes de 'Fabricants' peuvent se voir attribuer un rabais.

    Pour corser le tout les rabais sont gérés pas utilisateur. Chacun ajoute son rabais par marque ou par article.

    Pour afficher un détail d'article cela fonctionne très bien le détail s'affiche, le rabais par pièce et par marque se calcul, en fonction des requetes de mon premier post.

    Par contre la difficulté apparait dès lors où je veux commencer à faire des récapitulatifs.

    Exemple 'Les ordis portabe chez DELL les moins chers' : cela fonctionne très bien. Mais si je veux ajouter mes rabais, cela devient complexe. Je suis, je penses obligé de faire cela en plusieurs passes...

    PS :ma 'grosse' requete peut elle être simplifiée, ou je suis sur la bonne voie ?

Discussions similaires

  1. Requete sur un resultat d'une requete
    Par vaxxx dans le forum Linq
    Réponses: 13
    Dernier message: 24/10/2008, 10h08
  2. Réponses: 19
    Dernier message: 14/12/2006, 14h21
  3. Réponses: 2
    Dernier message: 31/05/2006, 09h47
  4. Execution d'une requete sur un resultat précédent
    Par Systemic7 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/08/2005, 14h43
  5. substr sur le $resultat d'une requete
    Par grellierj dans le forum Langage SQL
    Réponses: 12
    Dernier message: 21/01/2005, 11h28

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