Pregunta

En mi aplicación, hay editores y categorías. Un editor puede pertenecer a varias categorías. Cuando realizo mi transacción mysql, devolverá el mismo registro de editor para cada categoría a la que pertenece. Aquí está la consulta:

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

devuelve:

name    short_description   thumb_image url catname
------------------------------------------------------------
Foo Lorem Ipsum...      images/pic.png  d.com   Video Games
Foo Lorem Ipsum...      images/pic.png  d.com   Music
Bar Blah Blah...        images/tic.png  e.com   Music

Esencialmente, Foo solo debería aparecer una vez en los resultados.

¿Fue útil?

Solución

Puede usar DISTINCT pero si la columna any en su conjunto de resultados tiene un valor distinto, obliga a la fila a duplicarse. Si desea reducir la lista a una fila por name , entonces debe usar DISTINCT y debe omitir la columna catname :

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

Otra solución en lugar de usar DISTINCT es la función agregada de MySQL GROUP_CONCAT () que le permite tomar múltiples valores en un grupo y producir una lista separada por comas:

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;

Por lo tanto, debe decidir cómo desea que se vea el conjunto de resultados para obtener la solución correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top