mysql中有两个表。
文章表:
article_tag表
现在,我想基于“文章标题”或“ 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语句?
----以下是补充。----
我想按标题或标签搜索文章,因此如果输入“ test”,我应该得到两篇文章(如上图所示),但是它只有两篇文章,并且由于tag_name不同而导致的结果为三篇,文章one(id = 1)具有两个标签,因此mysql在关联查询后返回两个数据。
因此,上图中只有两个数据,在mybatis orm之后,结果类是一个数组[Article#1,Article#2]。并且Article#2的标签= ['tag1','tag2']。
我需要分页文章,而不是整个sql结果
答案 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