如何选择帖子的最后编辑版本?

2024-03-14

我有一个像SO这样的问答网站。我还有一个表格,其中包含问题和答案及其编辑版本。这是我的表结构:

// QandA
+----+---------+---------------------------+---------+------+-----------+
| id |  title  |            body           | related | type | edited_id |
+----+---------+---------------------------+---------+------+-----------+
| 1  | title1  | question content          | NULL    | 0    | NULL      |
| 2  |         | answer content            | 1       | 1    | NULL      | 
| 3  | title2  | question content          | NULL    | 0    | NULL      |
| 4  |         | answer content            | 3       | 1    | NULL      |
| 5  |         | answer content            | 1       | 1    | NULL      |
| 6  |         | answer content (edited)   | NULL    | 1    | 2         |
| 7  | title3  | question content          | NULL    | 0    | NULL      |
| 8  | title1  | question content (edited) | NULL    | 0    | 1         |
| 9  |         | answer content            | 7       | 1    | NULL      |
| 10 | title1  | question content (edited) | NULL    | 0    | 1         |
| 11 | title3  | question content (edited) | NULL    | 0    | 7         |
+----+---------+---------------------------+---------+------+-----------+

栏目说明:

related column:

  • NULL对于问题和问题/答案的编辑版本
  • {the id of its own question}寻求答案

type column:

  • 0如有疑问
  • 1寻求答案

edited_id column: (原帖id)

  • NULL意味着这是一个原始问题/答案
  • {any number}意味着它是问题/答案的编辑版本。

现在我需要一个查询来选择一个问题及其所有答案。注意到我需要选择the last它们的编辑版本(如果它们已被编辑).

示例1:我有这个值::id = 1我想要这个输出:

+----+---------+---------------------------+---------+------+-----------+
| id |  title  |            body           | related | type | edited_id |
+----+---------+---------------------------+---------+------+-----------+
| 10 | title1  | question content (edited) | NULL    | 0    | 1         |
| 6  |         | answer content (edited)   | NULL    | 1    | 2         |
| 5  |         | answer content            | 1       | 1    | NULL      |
+----+---------+---------------------------+---------+------+-----------+

示例2:我有这个值::id = 3我想要这个输出:

+----+---------+---------------------------+---------+------+-----------+
| id |  title  |            body           | related | type | edited_id |
+----+---------+---------------------------+---------+------+-----------+
| 3  | title2  | question content          | NULL    | 0    | NULL      |
| 4  |         | answer content            | 3       | 1    | NULL      |
+----+---------+---------------------------+---------+------+-----------+

示例2:我有这个值::id = 7我想要这个输出:

// QandA
+----+---------+---------------------------+---------+------+-----------+
| id |  title  |            body           | related | type | edited_id |
+----+---------+---------------------------+---------+------+-----------+
| 11 | title3  | question content (edited) | NULL    | 0    | 7         |
| 9  |         | answer content            | 7       | 1    | NULL      |
+----+---------+---------------------------+---------+------+-----------+

这是我当前的查询:

SELECT *
FROM QandA
WHERE (id = :id AND type = 0) OR
      (related = :id AND type = 1)
ORDER BY type -- noted that the order of answers doesn't matter

如您所见,我的查询不支持编辑版本。无论如何,当该帖子有已编辑的行时,如何替换已编辑的帖子版本?

Note:请不要告诉我“不要将问题和答案放在同一个表中”,因为我知道。但现在我需要解决上面的问题。


您可以尝试以下查询:

SET @qid := 1;

SELECT 
QA.*
FROM QA 
INNER JOIN 
(
    SELECT 
    MAX(GREATEST(A.id, COALESCE(B.id, 0))) latest_id
    FROM QA A 
    LEFT JOIN QA B ON A.id = B.edited_id 
    WHERE @qid IN(A.id,A.related,A.edited_id)
    GROUP  BY A.type , IF(A.type = 1, A.id,0)
) AS t 
ON QA.id = t.latest_id

WORKING DEMO http://sqlfiddle.com/#!9/2bd2cc/2/1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何选择帖子的最后编辑版本? 的相关文章

  • MySQL - 查询合并具有相同 id 的行并保留该 id 的所有条目但作为一条记录

    我一直在处理本地保存在 wamp 服务器上的 mysql 数据库中的表 我正在使用 wamp 中的 phpmyadmin 区域来运行查询 我正在尝试获取数据来执行以下操作 谁能帮我制作一张包含许多植物记录的表格 植物可以有多个名称 表格将其
  • 如何在php中正确显示另一种语言的mysql表数据

    我有一个 mySQL 表 其中一列中的数据采用英语以外的语言 波斯语 当我在表中输入数据时 它会正确显示 但是当我想在 php 文件中显示数据时 它会显示如下 好吧 我应该怎么做才能以正确的形式显示数据 由于我经常使用 非英语 字符 因此要
  • 表已满(使用 MEMORY 引擎)

    我想将生产数据库传输到我的开发机器上进行测试 它有 6 张桌子MEMORY出于性能目的的引擎 I did mysqldump routines hxxx uxxx pxxx prod database gt prod dump sql 当我
  • PHP MySQL 查询带有 %s 和 %d

    SELECT COUNT AS test FROM s WHERE id d AND tmp mail lt gt 什么是 s and d for 这些是使用的格式符号 例如经过sprintf 例子 Output SELECT COUNT
  • 显式与隐式 SQL 连接

    显式内连接与隐式内连接之间有效率差异吗 例如 SELECT FROM table a INNER JOIN table b ON a id b id vs SELECT a b FROM table a table b WHERE a id
  • 使用 SqlDataReader.IsDBNull 时使用列名

    我已经得到了从 SQL DB 读取数据的代码 我不知道应该如何编辑它 以便我可以使用原始列名称而不是列索引 string query SELECT FROM zajezd WHERE event thisrow AND year klien
  • 实体框架 - 查询可为空列时出现问题

    我在从具有可为空的tinyint 列的表中查询数据时遇到问题 问题似乎是查询生成为 AND CAST Extent1 PositionEffect AS int p linq 3 gt p linq 3 NULL 如果我手动运行该查询 它不
  • 如何将数据库查询的行转换为 XML 文件?

    我正在开发一个 Delphi 应用程序 该应用程序需要从一段工作中获取行并将其转换为单个 XML 文件 以便上传到第三方 Web 服务 有没有可用的组件或库可以做到这一点 如果不是 那么构建 DB2XML 转换器的最佳代码方法是什么 我注意
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 如何在 MySQL Insert 语句中添加 where 子句?

    这不起作用 INSERT INTO users username password VALUES Jack 123 WHERE id 1 有什么想法如何通过 id 将插入范围缩小到特定行吗 在插入语句中 您不会有现有行来执行 where 语
  • PostgreSQL:有效地将 JSON 数组拆分为行

    我有一个表 表 A 其中包含一个包含 JSON 编码数据的文本列 JSON 数据始终是一个包含一到几千个普通对象的数组 我有另一个表 表 B 其中有几列 包括数据类型为 JSON 的列 我想从表 A 中选择所有行 将 json 数组拆分为其
  • 如何查找列中未使用的ID? [复制]

    这个问题在这里已经有答案了 可能的重复 SQL查询查找丢失的序列号 https stackoverflow com questions 1057389 sql query to find missing sequence numbers 我
  • 如何避免这两个 SQL 语句之间出现死锁?

    我有两个存储过程在单独的线程中运行 在 SQL Server 2005 上运行 一个过程将新行插入到一组表中 另一个过程从同一组表中删除旧数据 这些过程在表上遇到了死锁DLevel and Model 这是架构 source barrams
  • 按每月时间为用户标记标签

    数据源 User ID Visit Date 1 2020 01 01 12 29 15 1 2020 01 02 12 30 11 1 2020 04 01 12 31 01 2 2020 05 01 12 31 14 Problem 我
  • 选定的非聚合值必须是关联组的一部分

    我在 Teradata 中有两个表 Table A 和 Table B 它们之间是 LEFT JOIN 之后我将创建 SELECT 语句 其中包含两个表中的属性 SELECT attribute 1 attribute 2 attribut
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 在 JavaFX 中搜索 TableView 列表

    如何在 TableWie 中查找记录 例如通过 ID 并选择创建的行并将其放在 Java 8 JavaFX 中的屏幕中间 您可以使用以下方式搜索元素 int searchId table getItems stream filter ite
  • 返回年份数组作为年份范围

    我正在尝试查询一个包含以下内容的表character varying 年份列 并将这些年份作为逗号分隔的年份范围字符串返回 年份范围将由数组中存在的连续年份确定 不连续的年份 年份范围应以逗号分隔 数据类型的原因是character var
  • 为什么我的浮点数大于 1 时在 MYSQL 中存储为 .9999?

    我将进程时间作为 float 4 4 存储在 MySQL 数据库中 start time microtime TRUE things happen in my script end time microtime TRUE process t

随机推荐

  • 从Python中的非线性方程组中找到复​​数根

    我一直在测试一种已在文献中发表的算法 该算法涉及在 Matlab 和 Python 中求解一组 m 非线性方程 非线性方程组涉及包含复数的输入变量 因此所得解也应该是复数 到目前为止 我已经能够通过使用以下代码行在 Matlab 中获得相当
  • 将附件上传到 azure devops [REST API]

    我很难通过 api 在我的 azure devops 存储库中添加附件 public static void putAttachments Integer id try URL url new URL https dev azure com
  • HtmlService 表不支持电子表格中的换行符和超链接

    我正在编写 Google Apps 脚本 以使用 HtmlService 将电子表格中的数据显示到 HTML 表中 但我面临以下两个挑战 如果电子表格单元格值中有换行符 表格会将其显示为单行 如果电子表格单元格具有超链接 例如链接到 Goo
  • XmlElement(name="custom_name") 在与其余服务集成的 Spring Boot 中不起作用

    我对休息服务世界几乎是新手 在这里我试图更改输出 xml 中显示的字段名称 不确定 我是否遵循正确的方法 任何帮助都是一件好事 活动 java import javax xml bind annotation XmlAccessType i
  • 为什么 Windows 为其系统地址空间保留 1Gb(或 2Gb)?

    众所周知 Windows 应用程序在 32 位系统上通常有 2Gb 的私有地址空间 使用 3Gb 开关可以将该空间扩展到 3Gb 操作系统自行保留剩余的 4Gb 我的问题是为什么 在内核模式下运行的代码 即设备驱动程序代码 有自己的地址空间
  • DCPCrypt/Delphi 未正确编码 Rijndael

    我有 DCPCrypt 包 最新版本 并尝试在 Delphi2007 中使用来自 NIST 分发的 AES 已知答案测试 KAT 向量的测试值进行 AES Rijndael CBC 编码 128 位块 256 位密钥 一个样本测试向量 KE
  • 具有符合协议的惰性、私有属性的 Swift Struct

    首先 我有一个仅定义一些只读属性的协议 例如 protocol Example var var1 String get var varArray String get 然后我想创建一个符合该协议的结构 我遇到的问题是我有两个相互冲突的要求
  • Firestore 查询具有多个值的循环

    我正在尝试使用字符串中保存的数据检索多个 Firestore 文档 这个想法是 对于数组中的每个值 我将使用 Firestore 查询来检索与该查询匹配的文档并将其推送到另一个数组 我在实现此目标时遇到了一些问题 到目前为止我已经尝试过 e
  • “Microsoft VBScript 运行时错误‘800a000d’‘800a000d’

    我有下一个代码 其工作原理如下 从url接收一些参数 将此数据插入名为 clients 的表中 然后我选择客户表中最后引入的数据 最后 它尝试将此数据插入到另一个名为 users 的表中 但我收到这个错误 Microsoft VBScrip
  • 在 jQuery.load() 上对容器的高度进行动画处理

    我正在使用 container div load url 通过 ajax 填充 div 我想将高度设置为返回内容的高度 但真的不知道如何实现这一点 我尝试过使用这样的东西 main fadeOut function main load ur
  • 由于文件 libmpi.so.1 丢失而出错

    我使用 Omnet 和 Veins 进行模拟 直到我昨晚从 Ubuntu 15 升级到 16 04 LTS 之前它都工作正常 现在 我在尝试运行模拟时收到以下错误 error while loading shared libraries l
  • 语音识别监听器在 Galaxy SII 中不起作用

    我正在开发一个Android应用程序 它总是监听用户的声音 当我在 Sony X10i 上运行时它可以工作 但在 Samsung Galaxy SII 上则不起作用 这是我的代码 SpeechRecognizer speechRecogni
  • Android比较imageView和image

    我想将当前 imageView 与 R drawable 中的图像进行比较 我想我已经尝试了一切 但我无法解决这个问题 我尝试了堆栈溢出的所有方法 XML
  • npm 安装失败,出现 make not found 错误

    当我尝试在 Nodejs 服务器上安装时间时 出现以下错误 email protected cdn cgi l email protection install var www track node modules time node gy
  • 如何使用 OpenGL ES 2.0 着色器完成这些图像处理任务?

    如何使用 OpenGL ES 2 0 着色器执行以下图像处理任务 色彩空间变换 RGB YUV HSL Lab 图像的旋转 转换为草图 转换为油画 我刚刚向我的开源添加了过滤器GPU图像框架 https github com BradLar
  • 为什么HashMap比HashSet快?

    我一直在阅读 研究原因HashMap比HashSet 我不太明白以下说法 HashMap比HashSet因为这些值与唯一的键相关联 In HashSet 成员对象用于计算两个对象的哈希码值可以相同 因此equals 方法用于检查相等性 如果
  • Windows 驱动程序时间戳函数

    我正在修改现有的 Windows 内核设备驱动程序 并且需要在其中捕获时间戳 我打算使用 time h 库并调用 Clock 函数来实现这一点 但是在 Windows Visual Studio 下 链接失败 所以我把它作为我需要在驱动程序
  • 应用于浮动操作按钮的 Alpha 会创建奇怪的圆圈?

    在我的应用程序中 我使用材料设计浮动操作按钮 每当我将按钮的 backgroundTintColor 属性更改为 alpha 低于 255 的值时 它就会在按钮内创建这个奇怪的圆圈 我已经用我的 xml 代码提供了下面按钮的图片 任何帮助将
  • 存储人类可读的 UUID 的最小方式是什么?

    存储人类可读且与数据库广泛兼容的 UUID 的最小方式是什么 我正在考虑使用十六进制值的某种字符数组 作为常见的方法 我认为将二进制数据 16 字节 编码为 Base64 可能是您想要的
  • 如何选择帖子的最后编辑版本?

    我有一个像SO这样的问答网站 我还有一个表格 其中包含问题和答案及其编辑版本 这是我的表结构 QandA id title body related type edited id 1 title1 question content NULL