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

PHP & Base de données Discussion :

Comment joindre une autre table proprement


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut Comment joindre une autre table proprement
    Bonjour,
    Je suis face à un petit problème de syntaxe que je n'arrive pas a resoudre.

    Voici ma requete initiale qui fontionne très bien

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // REQUETE NIVEAU 3
    $queryCat3rdLevel = "	SELECT c.id_category, c.level_depth, c.id_parent, c.active, l.id_category, l.name, l.id_lang FROM "._DB_PREFIX_."category c 
    INNER JOIN "._DB_PREFIX_."category_lang l ON c.id_category = l.id_category 
    WHERE c.active = 1 AND c.level_depth = 3 AND c.id_parent = ".$poolCategories[$key1]['child'][$key2]['id_category']." AND l.id_lang = ".$language." 
    ORDER BY l.name ASC";
    $resultCat3rdLevel= Db::getInstance()->s($queryCat3rdLevel);

    J'ai une autre table category_product ou sont stcker l'id des produit lié à une categorie

    J'ai juste besoin de savoir s'il y a au moins un produit. Le nombre m'est egal

    Donc pour cela je doins joindre ma table category_product et je l'ai fait ainsi
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $queryCat3rdLevel= "	SELECT c.id_category, c.level_depth, c.id_parent, c.active, l.id_category, l.name, l.id_lang , pc.id_category, pc.id_product
    FROM "._DB_PREFIX_."category c 
    INNER JOIN "._DB_PREFIX_."category_lang l ON c.id_category = l.id_category 
    LEFT JOIN "._DB_PREFIX_."category_product pc ON c.id_category = pc.id_category
    WHERE c.active = 1 AND c.level_depth = 3 AND c.id_parent = ".$poolCategories[$key1]['child'][$key2]['id_category']." AND l.id_lang = ".$language." 
    ORDER BY l.name ASC";
    $resultCat3rdLevel= Db::getInstance()->s($queryCat3rdLevel);

    Le problème c'est que me crère un doublon. C'est dure d'explique comme cela, mais deux mots, le l.name est afficher deux fois, alors qu'il ne l'était qu'une fois.

    Je sais pas si je fourni aussez d'information, mais le but initial est de questionner la table category_product pour savoir s'il y a au moins un produit associé à cette categorie, si oui je peux avoir un true ou false, dans l'array $resultCat3rdLevel.


    Es-ce que je vous ai founri assez d'info?

    Milles mercis

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut
    ce que je ne compremd pas, c'est pourquoi ca
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    					$queryCat3rdLevel				= "	SELECT c.id_category, c.level_depth, c.id_parent, c.active, l.id_category, l.name, l.id_lang
     
    													FROM "._DB_PREFIX_."category c 
    													INNER JOIN "._DB_PREFIX_."category_lang l ON c.id_category = l.id_category 
     
    													WHERE c.active = 1 AND c.level_depth = 3 AND c.id_parent = ".$poolCategories[$key1]['child'][$key2]['id_category']." AND l.id_lang = ".$language." 
     
    													ORDER BY l.name ASC";
     
    					$resultCat3rdLevel				= Db::getInstance()->s($queryCat3rdLevel);
    ca m'affiche ca
    Array ( [0] => Array ( [id_category] => 6 [level_depth] => 3 [id_parent] => 5 [active] => 1 [name] => test3 [id_lang]
    et que ca ca m'affiche ca ([id_category] =>)
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $queryCat3rdLevel				= "	SELECT c.id_category, c.level_depth, c.id_parent, c.active, l.id_category, l.name, l.id_lang, pc.id_category, COUNT(pc.id_product) as nbProd
     
    													FROM "._DB_PREFIX_."category c 
    													INNER JOIN "._DB_PREFIX_."category_lang l ON c.id_category = l.id_category 
    													LEFT JOIN "._DB_PREFIX_."category_product pc ON c.id_category = pc.id_category
    													WHERE c.active = 1 AND c.level_depth = 3 AND c.id_parent = ".$poolCategories[$key1]['child'][$key2]['id_category']." AND l.id_lang = ".$language." 
     
     
    													GROUP BY pc.id_product
    													ORDER BY l.name ASC";
     
    					$resultCat3rdLevel				= Db::getInstance()->s($queryCat3rdLevel);
    Array ( [0] => Array ( [id_category] => [level_depth] => 3 [id_parent] => 5 [active] => 1 [name] => test3 [id_lang] => 2 [nbProd] => 0 ) )
    Mon probleme vient de là c'est que
    [id_category] =>
    n'a pas de valeur

    Une petite idée??

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Essai en remplaçant le LEFT JOIN par INNER JOIN pour voir.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut
    Salut,
    Ben j'avais déjà essayé et je viens de le refaire. Là, ma equete ne me returne rien. Mon array est vide.....

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut
    je suis toujours bloqué avec ce problème,
    je vais vous donner aussi les tables

    category
    id_category, id_parent, level_depth, nleft, nright, active, date_add, date_upd, position
    category_lang
    id_category, id_lang, name, description, link_rewrite, meta_title, meta_keywords, meta_description
    category_product
    id_category,id_product,position

    Pour résumé
    j'aimerais connaitre le nombre de produit qui se trouve dans category_product en fonction de l'ID de la category c.id_category

    A la base, cette requete fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $queryCat3rdLevel= "	SELECT c.id_category, c.level_depth, c.id_parent, c.active, l.id_category, l.name, l.id_lang
    FROM "._DB_PREFIX_."category c 
    INNER JOIN "._DB_PREFIX_."category_lang l ON c.id_category = l.id_category 
    WHERE c.active = 1 AND c.level_depth = 3 AND c.id_parent = ".$poolCategories[$key1]['child'][$key2]['id_category']." AND l.id_lang = ".$language." 
    ORDER BY l.name ASC";	
    $resultCat3rdLevel= Db::getInstance()->s($queryCat3rdLevel);		
    echo 'avant dernier level3';
    print_r($resultCat3rdLevel);
    qui affiche ceci
    Array ( [0] => Array ( [id_category] => 6 [level_depth] => 3 [id_parent] => 5 [active] => 1 [name] => test3 [id_lang])
    J'ai modifié la requete précédente pour essayer de connaitre le nombre de produit. Je l'ai donc odifié ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $queryCat3rdLevel = "	SELECT DISTINCT COUNT(pc.id_product) as nbProd, c.id_category, c.level_depth, c.id_parent, c.active, l.id_category, l.name, l.id_lang, pc.id_category
    FROM "._DB_PREFIX_."category c 
    INNER JOIN "._DB_PREFIX_."category_lang l ON c.id_category = l.id_category 
    LEFT JOIN "._DB_PREFIX_."category_product pc ON c.id_category = pc.id_category
    													WHERE c.active = 1 AND c.level_depth = 3 AND c.id_parent = ".$poolCategories[$key1]['child'][$key2]['id_category']." AND l.id_lang = ".$language." 
     
    GROUP BY pc.id_product
    ORDER BY l.name ASC";
     
    $resultCat3rdLevel= Db::getInstance()->s($queryCat3rdLevel);
    print_r($resultCat3rdLevel);
    le problème c'est qu'il m'affiche ceci:
    Array ( [0] => Array ( [id_category] => [level_depth] => 3 [id_parent] => 5 [active] => 1 [name] => test3 [id_lang] => 2 [nbProd] => 0 ) )
    En soit c'est pas si faux que ca, quand dans mon exemple, je n'ai pas de produit pour la category en question, mais le probleme, c'est dans mon array
    [id_category] => n'a pas de valeur , alors qu'il devrait avoir un chiffre, 6 par exemple.

    Et ca, je n'arrive pas à comprendre pourquoi???

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/11/2010, 13h03
  2. Réponses: 2
    Dernier message: 29/09/2009, 00h50
  3. Comment récupérer des données, les comparer à une autre table.
    Par soria_t dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/08/2008, 17h58
  4. Réponses: 2
    Dernier message: 13/12/2007, 15h02
  5. Comment mettre à jour 1 champ d'une table via une autre tabl
    Par cpasmoibiensur dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/02/2006, 13h33

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