Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête avec jointure :s

    20 septembre 2011 à 13:54:20

    Bonjour la communauté,

    je vous sollicite car je bloque depuis un moment là dessus, je vous explique:

    j'ai :
    - une table products dans laquelle j'ai pour chaque produit un score
    - une table categoriedans laquelle j'ai mes catégories
    - une table products_to_categorie qui relie les 2 (avec un products_id et un categorie_id)

    j'aimerais effectuer une requête qui me permette d'obtenir, pour chaque catégorie, le produit ayant le meilleur score.

    j'ai essayé cela mais ne fonctionne pas

    SELECT top  p.products_id, p.products_score, c.cat_id, c.libelle
    FROM products p 
    JOIN products_to_cat ptc ON p.products_id = ptc.products_id
    JOIN cat c ON ptc.cat_id = c.cat_id
    WHERE p.products_score >=1 AND p.products_status = '1' AND c.cat_id IN (
                                             SELECT cat_id 
                                             FROM cat
                                             WHERE level = '1' )
    ORDER BY c.cat_id, p.products_score DESC
    


    mais ça ne fonctionne pas, enfin pas comme j'aimerais

    j'obtiens :
    ------------------------------------------------
    products_id | products_score | cat_id | libelle |
    ------------------------------------------------
    544         | 44040          |     1  |   cat1
    4557        | 40000          |     1  |   cat1
    54          |  8765          |     1  |   cat1
    5714        | 75962          |     2  |   cat2
    87788       | 14580          |     2  |   cat2
    7715        |  4596          |     2  |   cat2
    72695       | 87962          |     3  |   cat3
    87465       | 12055          |     3  |   cat3
    26050       |   458          |     3  |   cat3
    ...
    
    et j'aimerais n'avoir que celles-ci
    ------------------------------------------------
    products_id | products_score | cat_id | libelle |
    ------------------------------------------------
    544         | 44040          |     1  |   cat1
    5714        | 75962          |     2  |   cat2
    72695       | 87962          |     3  |   cat3
    

    Il me faut donc UN produit par catégorie (celui qui a le meilleur score)
    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2011 à 14:48:46

      Bonjour
      Il faut que tu utilises GROUP BY pour grouper par catégorie et prendre le score max
      • Partager sur Facebook
      • Partager sur Twitter
        20 septembre 2011 à 14:51:29

        Finalement ça ne va pas du tout !!
        je viens de me rendre compte quand faisant un GROUP BY, je n'obtenais pas du tout le plus grand score, mais le premier score de la liste !!!!

        --------------------------------------
        products_score | products_id | cat_id
        --------------------------------------
        1830           |    1331     | 9
         820           |    1326     | 10
        1150           |     447     | 11
        
        au lieu de
        
        --------------------------------------
        products_score | products_id | cat_id
        --------------------------------------
        32502          |    5846     | 9
        54044          |    9400     | 10
         4880          |   45871     | 11
        


        J'ai essayé ça :
        MAX(p.products_id)
        

        et là j'obtiens :
        --------------------------------------
        products_score | products_id | cat_id
        --------------------------------------
        32502          |    1331     | 9
        54044          |    1326     | 10
         4880          |     447     | 11
        
        au lieu de
        
        --------------------------------------
        products_score | products_id | cat_id
        --------------------------------------
        32502          |    5846     | 9
        54044          |    9400     | 10
         4880          |   45871     | 11
        

        j'obtiens effectivement mon score MAX, mais le products_id n'est pas celui qui correspond au score


        merci d'avance
        • Partager sur Facebook
        • Partager sur Twitter

        Requête avec jointure :s

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown