如何在 Join Query 中删除具有相同 id 的重复行?
How to remove duplicate rows have the same id in Join Query?
我使用 Kohana - 一个基于 PHP 的框架来制作一个搜索功能来搜索两个 table 中的所有名称,并且它不会重复。
两个 table 有这样的结构:
content - content_revision
id - id
title - content_id
- title
我尝试使用我的代码:
$contents = Jelly::select("content")
->join('content_revision')
->on('content.id', '=', 'content_revision.content_id')
->or_where("content.title", "LIKE", "%" . $value . "%")
->or_where("content_revision.title", "LIKE", "%" . $value . "%");
显示结果不够,结果中所有行的id都相同。
因为我在table content_revision
中的数据有很多行重复(content_id重复后相同)。
我尝试使用left join
,但它也显示相同的结果。
我认为使用 distinct
关键字只获取行并且它是唯一的。
所以,我在网上查了一下,但是没有任何文件可以定制。
我找到这个 link:
http://jelly.jonathan-geiger.com/docs/api/Jelly_Builder_Core#distinct
但是找不到服务器。
有什么方法可以解决我的问题吗?
谢谢。
您应该尝试 group_by。
$contents = Jelly::select("content")
->join('content_revision')
->on('content.id', '=', 'content_revision.content_id')
->or_where("content.title", "LIKE", "%" . $value . "%")
->or_where("content_revision.title", "LIKE", "%" . $value . "%")
->group_by("content.id");
试试这个,因为它只会给你最后一个版本来比较标题
$contents = Jelly::select("content")
->join('(SELECT CR.content_id,CR.title, MAX(CR.id) AS maxid
FROM content_revision CR GROUP BY CR.content_id) as LatestRevision')
->on('content.id', '=', 'LatestRevision.content_id')
->or_where("content.title", "LIKE", "%" . $value . "%")
->or_where("LatestRevision.title", "LIKE", "%" . $value . "%")
->group_by("content.id");
我使用 Kohana - 一个基于 PHP 的框架来制作一个搜索功能来搜索两个 table 中的所有名称,并且它不会重复。
两个 table 有这样的结构:
content - content_revision
id - id
title - content_id
- title
我尝试使用我的代码:
$contents = Jelly::select("content")
->join('content_revision')
->on('content.id', '=', 'content_revision.content_id')
->or_where("content.title", "LIKE", "%" . $value . "%")
->or_where("content_revision.title", "LIKE", "%" . $value . "%");
显示结果不够,结果中所有行的id都相同。
因为我在table content_revision
中的数据有很多行重复(content_id重复后相同)。
我尝试使用left join
,但它也显示相同的结果。
我认为使用 distinct
关键字只获取行并且它是唯一的。
所以,我在网上查了一下,但是没有任何文件可以定制。
我找到这个 link:
http://jelly.jonathan-geiger.com/docs/api/Jelly_Builder_Core#distinct
但是找不到服务器。
有什么方法可以解决我的问题吗?
谢谢。
您应该尝试 group_by。
$contents = Jelly::select("content")
->join('content_revision')
->on('content.id', '=', 'content_revision.content_id')
->or_where("content.title", "LIKE", "%" . $value . "%")
->or_where("content_revision.title", "LIKE", "%" . $value . "%")
->group_by("content.id");
试试这个,因为它只会给你最后一个版本来比较标题
$contents = Jelly::select("content")
->join('(SELECT CR.content_id,CR.title, MAX(CR.id) AS maxid
FROM content_revision CR GROUP BY CR.content_id) as LatestRevision')
->on('content.id', '=', 'LatestRevision.content_id')
->or_where("content.title", "LIKE", "%" . $value . "%")
->or_where("LatestRevision.title", "LIKE", "%" . $value . "%")
->group_by("content.id");