求救:mysql 如何根据给定的 ID顺序查找结果?
各位大神,现在我遇到了一个难题需要你们的帮助。
有下面两个表
post表:文章表。
record表:记录表,用于记录用户阅读顺序。
record表 根据用户的阅读文章顺序用一个字段 postid 记录 post 表的主键ID,既 record.postid 的外键为 post.id 。
现在需要根据 record 表里的 postid 查找 post表的文章。(假设用记阅读顺序为:'文章1,文章2,文章2,文章3,文章3' 允许文章重复。)
开始我用
<code>SELECT * FROM post WHERE id IN (postid1,postid2,postid2,postid3,postid3);</code>
查找结果只能查找 postid1,postid2,postid3 的文章。
现在想要的业务逻辑是:
1:根据用户的阅读记录查找post表文章。
2:允许重复。
比如用户阅读的文章读顺序为:'文章1,文章2,文章2,文章3,文章3',查找 post 表出来的结果为:post.id1, post.id2,post.id2,post.id2,post.id3。
注:考虑过用 FOR 循环
<code> for (.....){ ... 变量 数组x; 数组x添加 SELECT * FROM post WHERE id = postidx; .... }</code>
但又担心效率问题。
回复内容:
各位大神,现在我遇到了一个难题需要你们的帮助。
有下面两个表
post表:文章表。
record表:记录表,用于记录用户阅读顺序。
record表 根据用户的阅读文章顺序用一个字段 postid 记录 post 表的主键ID,既 record.postid 的外键为 post.id 。
现在需要根据 record 表里的 postid 查找 post表的文章。(假设用记阅读顺序为:'文章1,文章2,文章2,文章3,文章3' 允许文章重复。)
开始我用
<code>SELECT * FROM post WHERE id IN (postid1,postid2,postid2,postid3,postid3);</code>
查找结果只能查找 postid1,postid2,postid3 的文章。
现在想要的业务逻辑是:
1:根据用户的阅读记录查找post表文章。
2:允许重复。
比如用户阅读的文章读顺序为:'文章1,文章2,文章2,文章3,文章3',查找 post 表出来的结果为:post.id1, post.id2,post.id2,post.id2,post.id3。
注:考虑过用 FOR 循环
<code> for (.....){ ... 变量 数组x; 数组x添加 SELECT * FROM post WHERE id = postidx; .... }</code>
但又担心效率问题。
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的顺序取出后组装需要的数据类型

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4

Spring Boot简化了可靠,可扩展和生产就绪的Java应用的创建,从而彻底改变了Java开发。 它的“惯例惯例”方法(春季生态系统固有的惯例),最小化手动设置

堆栈是遵循LIFO(最后,首先)原理的数据结构。换句话说,我们添加到堆栈中的最后一个元素是第一个要删除的元素。当我们将(或推)元素添加到堆栈中时,它们就会放在顶部;即最重要的

阿姆斯特朗数 阿姆斯特朗数是指一个数的各位数字的n次幂之和等于该数本身,其中n是该数的位数。本文将讨论如何检查给定的数字是否为阿姆斯特朗数。 示例 让我们通过一些输入输出示例来了解阿姆斯特朗数。 输入 9474 输出 是 解释 这是一个四位数。这个数的数字是 9、4、7 和 4。 9474 = 94 44 74 44= 6561 256 2401 256= 9474 所以,这是一个阿姆斯特朗数。 输入 153 输出 是 解释 这是一个三位数。这个数的数字是 1、5 和 3

Intellij Idea简化了Spring Boot的开发,使其成为Java开发人员的最爱。 它的惯例与配置方法最小化了样板代码,从而使开发人员可以专注于业务逻辑。本教程展示了两个metho
