MySQL - 如何在关系查询中对模糊查询的结果进行分页
MySQL - How to page the results of fuzzy queries in relational queries
mysql中有两个table。
文章table:
article_tag table
现在,我想根据'title of article'或'tag_name of 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)有两个tag,所以mysql return关联查询后有两个数据
所以上图中只有两个数据,mybatis orm后,结果class是一个数组[Article#1, Article#2]。而文章#2 的标签 = ['tag1', 'tag2'].
我需要分页文章,而不是整个 sql 结果
等等,你为什么不能直接使用 order by a.article_id?
可能我没看懂……
现在我想到一个答案,这是我的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
mysql中有两个table。
文章table:
article_tag table
现在,我想根据'title of article'或'tag_name of 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)有两个tag,所以mysql return关联查询后有两个数据
所以上图中只有两个数据,mybatis orm后,结果class是一个数组[Article#1, Article#2]。而文章#2 的标签 = ['tag1', 'tag2'].
我需要分页文章,而不是整个 sql 结果
等等,你为什么不能直接使用 order by a.article_id? 可能我没看懂……
现在我想到一个答案,这是我的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