2008-11-07 9 views
3

Dans mon application, il existe des éditeurs et des catégories. Un éditeur peut appartenir à plusieurs catégories. Lorsque j'effectue ma transaction mysql, elle renvoie le même enregistrement éditeur pour chaque catégorie à laquelle elle appartient. Voici la requête:Obtention d'enregistrements distincts à partir d'une requête mysql

SELECT 
    grdirect_publisher.name, 
    grdirect_publisher.short_description, 
    grdirect_publisher.thumb_image, 
    grdirect_publisher.url, 
    grdirect_category.name AS catname 
FROM 
    grdirect_publisher 
JOIN 
    grdirect_publisher_categories 
    ON 
    grdirect_publisher.id = grdirect_publisher_categories.publisher_id 
JOIN 
    grdirect_category 
    ON 
    grdirect_publisher_categories.category_id = grdirect_category.id

retours:

Essentiellement, Foo ne devrait apparaître une fois dans les résultats.

+0

Si vous voulez que Foo n'apparaisse qu'une seule fois, quel nom de chat aimeriez-vous voir: jeux vidéo ou musique? –

+0

ce ne serait pas grave. le group_concat me donne tous dans une colonne. – blackrobot

Répondre

4

Vous pouvez utiliser DISTINCT mais si une colonne dans votre jeu de résultats a une valeur distincte, elle force la ligne à être dupliquée. Si vous voulez réduire la liste à une ligne par name, alors vous devez utiliser DISTINCT et vous devez omettre la colonne catname:

SELECT DISTINCT 
    grdirect_publisher.name, 
    grdirect_publisher.short_description, 
    grdirect_publisher.thumb_image, 
    grdirect_publisher.url 
FROM 
. . . 

Une autre solution au lieu d'utiliser DISTINCT est fonction d'agrégation de MySQL GROUP_CONCAT() qui vous permet de prendre plusieurs valeurs dans un groupe et produire une liste séparée par des virgules:

SELECT 
    grdirect_publisher.name, 
    grdirect_publisher.short_description, 
    grdirect_publisher.thumb_image, 
    grdirect_publisher.url, 
    GROUP_CONCAT(grdirect_category.name) AS catname 
. . . 
GROUP BY grdirect_publisher.id; 

vous devez décider comment vous voulez que le jeu de résultats à chercher à obtenir la bonne solution.