簡體   English   中英

從mysql查詢中獲取不同的記錄

[英]Getting distinct records from a mysql query

在我的應用程序中,有發布者和類別。 一個發布者可以屬於多個類別。 當我創建我的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

收益:

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

從本質上講,Foo應該只在結果中出現一次。

您可以使用DISTINCT但如果結果集中的任何列具有不同的值,則會強制重復該行。 如果要將列表縮減為每個name一行,則必須使用DISTINCT並且必須省略catname列:

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

另一種不使用DISTINCT解決方案是MySQL的聚合函數GROUP_CONCAT() ,它允許您在一個組中獲取多個值並生成以逗號分隔的列表:

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;

因此,您必須決定如何使用結果集來獲得正確的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM