如何在 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");