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

Langage SQL Discussion :

Problème avec requête SQL


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Problème avec requête SQL
    Bonjour,

    Je vous sollicite aujourd'hui car je m'arrache un peu les cheveux sur un problème surement très simple mais qui me bloc à cause de mon niveau médiocre en SQL.

    Voila j'essai de modifier un plugin sous prestashop et j'ai une requête qui me renvoi qu'une ligne sur les deux.

    Dans ma table (associates) il y a :

    id | id_product_1 | id_product_2 | number | taxonomy

    246251 | 273 | 754 | 8 | schema
    246252 | 273 | 754 | 7 | schema


    et voici la 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    SELECT  p.*, product_shop.*,
    					stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity,
    					MAX(product_attribute_shop.id_product_attribute) id_product_attribute, product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity,
    					pl.*, MAX(image_shop.`id_image`) id_image, il.`legend`,
    					m.`name` as manufacturer_name, cl.`name` AS category_default,
                                            DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(int)$new.' DAY)) > 0 new
                        , a.number as number
                                    FROM `'._DB_PREFIX_.'associates` a
                                    LEFT JOIN `'._DB_PREFIX_.'product` p ON ( p.`id_product` = `id_product_2`)
                                    '.Shop::addSqlAssociation('product', 'p').'
                                    LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)self::$id_lang.Shop::addSqlRestrictionOnLang('pl').')
                                    LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
                                    ON (p.`id_product` = pa.`id_product`)
                                    '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').'
                                    LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)self::$id_lang.Shop::addSqlRestrictionOnLang('cl').')
                                    LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
                                    Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
                                    LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)self::$id_lang.')
                                    LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (p.`id_manufacturer`= m.`id_manufacturer`)
                                    '.Product::sqlStock('p', 0).'
                                    WHERE 1
                                    AND a.id_product_2 != 0
                                    AND a.taxonomy = \''.pSQL($taxonomy).'\'
                                    '.($id_product?'AND a.id_product_1 ='.(int)$id_product:'').'
                                    '.($active ? ' AND product_shop.`active` = 1 AND product_shop.`visibility` != \'none\'' : '').'
                                    GROUP BY product_shop.id_product
    				ORDER BY number
    				';

    Pouvez-vous me dire ce qui fait que sur les deux lignes qu'il devrait me renvoyer il ne m'en renvoi qu'une seule ? Je pense que c'est à cause du GROUP BY mais si je le retire ça ne fonctionne plus...


    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Pour l'une des deux lignes la condition product_shop.`active` = 1 AND product_shop.`visibility` != \'none\'' n'est pas vérifiée.
    Il faut ramener cette restriction dans les conditions de jointures si nécessaire.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    La requête n'est pas facile à lire , mais la raison est très probablement liée à la clause WHERE dans laquelle l'une des colonnes serait issue d'une table OUTER ce qui transforme implicitement la jointure concernée en INNER JOIN.

  4. #4
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses.

    Escartefigue - Il semblerait qu'effectivement la jointure s'effectue en "INNER JOIN" mais je ne vois pas dans la clause "WHERE" de colonne issu de table "OUTER".
    J'ai retiré "product_shop.`active` = 1 AND product_shop.`visibility` != \'none\'' " des conditions et le problème est le même...

    Je constat aussi que si je met "MIN(a.number) as number" dans le "SELECT" le résultat sera "246252 | 273 | 754 | 7 | schema" alors que si je ne met que "a.number as number" le résultat sera "246251 | 273 | 754 | 8 | schema"

    Si vous avez une idée je suis preneur.

    Merci d'avance.

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour


    Le problème vient de la clause GROUP BY incohérente : il faudrait ajouter les colonnes qui ne dépendent pas fonctionnellement de product_shop.id_product

  6. #6
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé de modifier GROUP BY en mettant a.id par exemple. Ca me sort bien mes lignes mais le "number" est identique d'une ligne à l'autre.

    Si vous avez une idée de ce que je peux mettre comme colonne dans le GROUP BY ... dans l'idéal il ne faudrait pas grouper mais si je retire le GROUP BY ça bug complètement et ne m'affiche plus qu'un seul résultat qui correspond à je ne sais quoi.

Discussions similaires

  1. [SQL] Problème avec requête SQL
    Par Kenya dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/01/2008, 22h13
  2. Problème avec requête SQL dans VBA
    Par Mimisio dans le forum VBA Access
    Réponses: 10
    Dernier message: 13/07/2007, 11h00
  3. [SQL] problème avec requête sql
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/05/2007, 11h58
  4. probléme avec requête SQL
    Par richard60 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/03/2007, 18h18
  5. Problème avec requête SQL avec variables
    Par harry25 dans le forum ASP
    Réponses: 1
    Dernier message: 03/01/2007, 03h41

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