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 sur table multiple


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Par défaut Requête sur table multiple
    Bonjour à tous,
    Ceci est mon premier message sur le forum, car jusqu'à maintenant, j'avais toujours trouver se que je voulais en cherchant bien, mais là je sèche.
    Pour une boutique prestashop, je dois créer des taches cron, pour alimenter d'autre tables sur la même BDD.
    Jusque là aucun problèmes, j'ai fait mes select dans plusieurs table, l'enregistrement se fait bien.
    Mais j'ai un cas particulièrement complexe :
    En effet, j'ai intégrer des caractéristique dans mes produits, ceux-ci sont stocké par prestashop dans une table à part.
    Dans cette table j'ai donc chaque ligne qui contient une caractéristique et l'id du produit.
    Mon problème est que je veux récupérer ces caractéristiques dans une autre table, mais sur une même ligne
    donc obtenir ; id produit, caractéristique 1, caractéristique 2 (je n'en n'aurais jamais plus que deux car je les utilise comme famille et sous-famille)
    Dans une page de site, cela ne me poserai aucun souci, mais là je souhaiterai le faire en requête SQL.

    Pour le moment, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
    ps_product.supplier_reference,
    ps_product_lang.name,
    ps_feature_product.id_feature_value AS famille,
    ps_feature_product.id_feature_value AS ss_famille
     
    FROM ps_product, ps_product_lang, ps_feature_product
     
    WHERE ps_product_lang.id_product = ps_product.id_product
    AND ps_feature_product.id_product = ps_product.id_product;

    J'ai donc 2 lignes de résultat car mon produit à deux caractéristiques
    Nom : FireShot Pro Screen Capture #046 - 'localhost _ localhost _ newprestashop _ ps_feature_product I.jpg
Affichages : 176
Taille : 185,3 Ko

    Je souhaiterai cela sur une ligne avec id_produit, famille, sous-famille

    Cela est possible directement en SQL ?
    (désolé si cette question peut être basique, mais c'est la première fois que je me lance dans du SQL poussé sans php)

    Merci d'avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Par défaut
    Bonjour,
    Mon crane ressemble peu à peu à celui d'Homer Simpson mais je me rapproche.

    Avec cette requête :
    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
     
     
    SELECT
    ps_product.supplier_reference,
    ps_product.id_supplier,
    ps_product.ean13,
    ps_product_lang.name,
    ps_product.wholesale_price,
    ps_product.price AS prix_HT,
    ps_product.price,
    ps_product.id_product,
    ps_product.id_manufacturer,
    (CASE WHEN ps_feature_product.id_feature= '9' THEN ps_feature_product.id_feature ELSE NULL END) AS famille, (CASE WHEN ps_feature_product.id_feature= '10' THEN ps_feature_product.id_feature ELSE NULL END) sous_famille
     
    FROM ps_product, ps_product_lang, ps_feature_product
     
    WHERE ps_product_lang.id_product = ps_product.id_product
    AND ps_feature_product.id_product = ps_product.id_product
    ;
    (donc avec le case en plus par rapport à la requête précédente) j'arrive avec famille et sous famille dans les bonnes colonnes, MAIS j'ai toujours deux lignes...

    Nom : FireShot Pro Screen Capture #047 - 'localhost _ localhost _ newprestashop _ ps_product I phpMyAd.jpg
Affichages : 175
Taille : 167,9 Ko


    J'ai donc ajouter un GROUP BY ps_product.id_product; pour n'avoir qu'une ligne mais dans ce cas là, seul la première ligne apparaît, c'est à dire que j'ai NULL dans la colonne sous famille

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Par défaut
    J'ai réussi à obtenir le résultat que je voulais :
    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
     
     
    SELECT
    ps_product.supplier_reference,
    ps_product.id_supplier,
    ps_product.ean13,
    ps_product_lang.name,
    ps_product.wholesale_price,
    ps_product.price AS prix_HT,
    ps_product.price,
    ps_product.id_product,
    ps_product.id_manufacturer,
    min(CASE WHEN ps_feature_product.id_feature= '9' THEN ps_feature_product.id_feature_value ELSE NULL END) AS famille, max(CASE WHEN ps_feature_product.id_feature= '10' THEN ps_feature_product.id_feature_value ELSE NULL END) sous_famille
     
    FROM ps_product, ps_product_lang, ps_feature_product
     
    WHERE ps_product_lang.id_product = ps_product.id_product
    AND ps_feature_product.id_product = ps_product.id_product
     
    GROUP BY ps_product.id_product
    ;
    qui me sort
    Nom : FireShot Pro Screen Capture #047 - 'localhost _ localhost _ newprestashop _ ps_product I phpMyAd.jpg
Affichages : 161
Taille : 175,5 Ko

    Toutefois n'étant pas sûr que la solution soit la plus efficace, je ne passe pas de suite le sujet en résolu

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonsoir,

    je dirais un truc dans le genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT pr.supplier_reference, pr.id_supplier, ... -- toutes les autres colonnes de ps_product
    		fpf.id_feature, fpsf.id_feature
    FROM ps_product pr
    LEFT JOIN ps_feature_product fpf ON pr.id_product = fpf.id_product
    LEFT JOIN ps_feature_product fpsf ON pr.id_product = fpsf.id_product AND fpsf.id_product <> fpf.id_product

    Je ne suis pas du tout sûr que cela réponde à votre besoin, mais ça peut vous mettre sur la piste.

Discussions similaires

  1. [AC-2013] Requête sur tables multiples
    Par vduvernet dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 09/10/2014, 14h52
  2. Requêtes sur tables multiples
    Par rodjeur dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 23/05/2012, 11h02
  3. [Oracle] Pb conditions sur tables multiples
    Par guitou12 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2006, 15h48
  4. [SQL] Pb conditions sur tables multiples
    Par guitou12 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/08/2006, 13h49
  5. Requête sur table à double clés primaires
    Par darkian dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/03/2005, 17h28

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