从 mysql 查询中获取不同的记录
Posted
技术标签:
【中文标题】从 mysql 查询中获取不同的记录【英文标题】:Getting distinct records from a mysql query 【发布时间】:2010-09-21 09:29:39 【问题描述】:在我的应用程序中,有发布者和类别。一个发布者可以属于多个类别。当我进行 mysql 事务时,它将为其所属的每个类别返回相同的发布者记录。这是查询:
选择 grdirect_publisher.name, grdirect_publisher.short_description, grdirect_publisher.thumb_image, grdirect_publisher.url, grdirect_category.name 作为猫名 从 grdirect_publisher 加入 grdirect_publisher_categories 在 grdirect_publisher.id = grdirect_publisher_categories.publisher_id 加入 grdirect_category 在 grdirect_publisher_categories.category_id = grdirect_category.id
返回:
名称 short_description thumb_image url 猫名 -------------------------------------------------- ---------- Foo Lorem Ipsum... images/pic.png d.com 视频游戏 Foo Lorem Ipsum... images/pic.png d.com 音乐 Bar Blah Blah... images/tic.png e.com 音乐本质上,Foo 应该只在结果中出现一次。
【问题讨论】:
如果您希望 Foo 只出现一次,您希望看到哪个猫名:视频游戏或音乐? 没关系。 group_concat 在一列中给了我所有这些。 【参考方案1】:您可以使用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;
因此,您必须决定您希望结果集如何获得正确的解决方案。
【讨论】:
以上是关于从 mysql 查询中获取不同的记录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用两个不同的列 mySQL 从查询而不是其他查询中获取数据? [复制]