[英]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.