我使用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
但找不到服务器。
有什么方法可以解决我的问题吗?
感谢。
答案 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");