MySQL-如何在关系查询中分页模糊查询的结果

时间:2018-08-21 16:45:32

标签: mysql sql mybatis

mysql中有两个表。

文章表:

article table struct

article_tag表

article_tag table struct

现在,我想基于“文章标题”或“ article_tag的标签名”查询结果,并且我想按article_id对结果进行分页。

这是我的sql语句

select a.*, atag.tag_name from article a, article_tag atag 
where (a.title like '%test%' or atag.tag_name like '%test%') 
    and a.article_id=atag.article_id 
order by a.gmt_modified desc

但是此语句查询所有结果,我无法根据article_id进行分页。

sql result

我不需要存储过程。

我应该如何编写sql语句?

----以下是补充。----

我想按标题或标签搜索文章,因此如果输入“ test”,我应该得到两篇文章(如上图所示),但是它只有两篇文章,并且由于tag_name不同而导致的结果为三篇,文章one(id = 1)具有两个标签,因此mysql在关联查询后返回两个数据。

因此,上图中只有两个数据,在mybatis orm之后,结果类是一个数组[Article#1,Article#2]。并且Article#2的标签= ['tag1','tag2']。

我需要分页文章,而不是整个sql结果

2 个答案:

答案 0 :(得分:-1)

等等,为什么您不能只使用a.article_id的订单? 也许我听不懂..

答案 1 :(得分:-1)

现在我想出一个答案,这是我的sql语句,使用exists

    SELECT
        temp.*,
        atag.*
    FROM
        (
        SELECT
            a.*
        FROM
            article a
        WHERE
            a.title LIKE '%#{searchContent}%'
            OR EXISTS ( SELECT * FROM article_tag WHERE tag_name LIKE '%#{searchContent}%' AND a.article_id = article_id )
        ORDER BY
        a.gmt_modified DESC,
        a.gmt_create DESC
        LIMIT #{offset}, #{rows}
        ) temp
    LEFT JOIN article_tag atag ON temp.article_id = atag.article_id