如何删除重复行在Join Query中具有相同的ID?

时间:2016-09-29 04:56:28

标签: php mysql join kohana

我使用Kohana--一个基于PHP的框架,使搜索功能能够搜索两个表中的所有名称,并且不会重复。

两个表有这样的结构:

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都相同。

因为表content_revision中的数据有很多行重复(重复后content_id相同)。

我尝试使用left join,但它也显示了相同的结果。

我认为使用distinct关键字只能获取行,而且它是唯一的。

所以,我在互联网上进行研究,但没有任何文件需要定制。

我找到了这个链接:

http://jelly.jonathan-geiger.com/docs/api/Jelly_Builder_Core#distinct

但找不到服务器。

有什么方法可以解决我的问题吗?

感谢。

2 个答案:

答案 0 :(得分:1)

你应该尝试使用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");

答案 1 :(得分:1)

试试这个,因为它只会给你最后一个版本来比较标题

$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");