各位大神,现在我遇到了一个难题需要你们的帮助。
有下面两个表
post表:文章表。
record表:记录表,用于记录用户阅读顺序。
record表 根据用户的阅读文章顺序用一个字段 postid 记录 post 表的主键id,既 record.postid 的外键为 post.id 。
现在需要根据 record 表里的 postid 查找 post表的文章。(假设用记阅读顺序为:'文章1,文章2,文章2,文章3,文章3' 允许文章重复。)
开始我用
select *from postwhere id in (postid1,postid2,postid2,postid3,postid3);
查找结果只能查找 postid1,postid2,postid3 的文章。
现在想要的业务逻辑是:
1:根据用户的阅读记录查找post表文章。
2:允许重复。
比如用户阅读的文章读顺序为:'文章1,文章2,文章2,文章3,文章3',查找 post 表出来的结果为:post.id1, post.id2,post.id2,post.id2,post.id3。
注:考虑过用 for 循环
for (.....){ ... 变量 数组x; 数组x添加 select * from post where id = postidx; .... }
但又担心效率问题。
回复内容: 各位大神,现在我遇到了一个难题需要你们的帮助。
有下面两个表
post表:文章表。
record表:记录表,用于记录用户阅读顺序。
record表 根据用户的阅读文章顺序用一个字段 postid 记录 post 表的主键id,既 record.postid 的外键为 post.id 。
现在需要根据 record 表里的 postid 查找 post表的文章。(假设用记阅读顺序为:'文章1,文章2,文章2,文章3,文章3' 允许文章重复。)
开始我用
select *from postwhere id in (postid1,postid2,postid2,postid3,postid3);
查找结果只能查找 postid1,postid2,postid3 的文章。
现在想要的业务逻辑是:
1:根据用户的阅读记录查找post表文章。
2:允许重复。
比如用户阅读的文章读顺序为:'文章1,文章2,文章2,文章3,文章3',查找 post 表出来的结果为:post.id1, post.id2,post.id2,post.id2,post.id3。
注:考虑过用 for 循环
for (.....){ ... 变量 数组x; 数组x添加 select * from post where id = postidx; .... }
但又担心效率问题。
select p.*
from post p
left join record r on r.postid = p.id
order by r.id asc
record表记录阅读顺序,所以需要根据record表的顺序来就排序
可以提供一种思路:用in的方式从数据库取出数据,用map建立对应关系map.put(postid,post)。再按照id的顺序取出后组装需要的数据类型