如何向表示多对多关系的 MySQL 闭包表添加排序顺序?

2024-05-06

这是我的问题的后续:
如何在MySQL中实现多对多的层次结构 https://stackoverflow.com/questions/9691366/how-to-implement-a-many-to-many-hierarchical-structure-in-mysql
和这里:
如何在MySQL中记录记录的顺序集合 https://stackoverflow.com/questions/9610942/how-to-record-sequential-collections-of-records-in-mysql.

简而言之,我想在 MySQL 中实现一个食谱表和另一个指令表。菜谱是一系列连续的指令或其他食谱。例如你可以想象Peach_preserve食谱,和一个Peach_tart使用的是Peach_preserve,加上一系列其他步骤(说明)。Peach_preserve可用于许多其他食谱。

I read Bill Karwin 撰写的关于闭包表的博客文章 http://karwin.blogspot.com/2010/03/rendering-trees-with-closure-tables.html,我认为这个解决方案最好地解决了我的挑战(我的层次结构是多对多的,步骤是连续的)。例如我会:

recipe
id  name
1   Peach preserve
2   Cubed peeled peaches
3   Fresh peaches
4   Powdered sugar
5   Cook together
6   Peel and cut in chunks
7   Mix

step (or instruction)
id  desc
1   Cook together
2   Buy peaches
3   Buy sugar
4   Peel and cut in chunks
5   Mix

recipe_instruction
(Ancestor) (Descendant)
recipe_id  step_id   depth  descendant_is_instruction
3          3         0      0
3          2         1      1
4          4         0      0
4          3         1      1
6          6         0      0
6          4         1      1
2          2         0      0
2          3         1      0
2          2         2      1
2          6         1      0
2          4         2      1
(and so on...)

我不是的粉丝descendant_is_instruction标志,但我不知道还能怎么做。我想我可以用一个替换它descendant_is_leaf识别终端项目...

排序顺序由包含深度为 1 的所有关系的表表示:

Depth=1 table
recipe_id  step_id      order
3           2            1
4           3            1
6           4            1
2           3            1
2           6            2

我在这里进行简化,因为在实践中我会将成分和说明分开,但你明白了。

那么,这是结合分层数据结构和步骤顺序概念的好方法吗?我应该做些什么来改进/简化?


菜谱是一系列连续的指令或其他菜谱。

根据人们如何阅读这句话,这可能会产生歧义。

怎么样:

配方是一系列连续的指令。

指令可以是简单的(一片叶子)或复杂的(使用另一个食谱)。

这使:

Table recipe:
- column id
- column name
- column total_cost, total_preparation_time, etc

Table instruction:
- column id
- column recipe_id
- column step_order
- column description
- column child_recipe_id (can be NULL)

所以,如果桃挞使用面团和桃子蜜饯:

select * from recipe order by id;
id      name
1       Dough
2       Peach preserve
3       Peach tart

select * from instruction order by recipe_id, step_order;
id recipe_id step_order description     child_recipe_id

100     1       1       Get flour       NULL
101     1       2       Add water       NULL
102     1       3       Mix together    NULL

201     2       1       Peel peaches    NULL
202     2       2       Cube peaches    NULL
203     2       3       Add sugar       NULL
204     2       4       Cook together   NULL

301     3       1       Pre heat oven   NULL
302     3       2       Prepare dough   1
303     3       3       Prepare peach   2
304     3       4       Bake            NULL

没有“是叶子”标志。

如果一条指令不指向子配方,即 child_recipe_id 为 NULL,则该指令是叶子。

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

如何向表示多对多关系的 MySQL 闭包表添加排序顺序? 的相关文章

  • 如何根据同一个表中的先前数据更新 SQL 表

    我有一张衡量学生表现的表格student在我的数据库中如下 ID TestDate PerformanceStatus PS 1 15 03 2016 0 1 01 04 2016 2 1 05 05 2016 1 1 07 06 2016
  • SQL 按计数排序

    如果我有一个表和这样的数据 ID Name Group 1 Apple A 2 Boy A 3 Cat B 4 Dog C 5 Elep C 6 Fish C 我希望根据 Group 的总和从小到大进行排序 例如 A 2条记录 B 1条记录
  • PHP,文本从数据库中回显,没有换行,全部一体

    我的数据库中有一个长文本 从 php mayadmin 来看它看起来很好 但是当我将它回显到页面时 它会丢失所有格式 即没有新行 全部都在一个块中 有任何想法吗 Thanks 可能是因为换行符是 n 并且 html 想要 br 所以使用nl
  • 重置 MySQL root 密码不起作用

    我花了很多时间阅读并尝试了数十种重置 root 密码的方法 但我一无所获 我发现 并尝试过 的最完整的说明如下 顺便说一句 我在 Win7 32 位上运行 MySQL 5 5 我创建了一个文件 c mysqlinit txt 其中包含两行
  • Magento --“SQLSTATE[23000]:违反完整性约束..”客户更新

    迁移服务器后 每次尝试更新客户信息时都会出现错误 我正在使用一个客户激活插件 http www magentocommerce com magento connect vinai extension 489 customer activat
  • MySQL:如何获取每个分组的x个结果数[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • Hibernate + MySQL + rewriteBatchedStatements=true

    我有以下 Hibernate 配置
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • 如何导出带有数据的 MySQL 架构?

    我有一个完整的架构 其中有许多表 其中包含 MySQL 查询浏览器中的数据 现在我想将这个包含所有表 数据的完整数据库发送给我的同事 我怎样才能将其发送给我的同事 以便他可以将这个完整的架构放入他的 MySQL 查询浏览器中 Thanks
  • MySQL Python 关于重复键更新值

    我正在研究使用 python 将 JSON 数据上传到 MySQL 我需要在插入语句中包含 ON DUPLICATE KEY UPDATE VALUES 但在 Python 中遇到了问题 如果我运行以下代码 一切正常 import json
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • 无法在 mysql-apt-config [Ubuntu 14.04] 中选择“确定”

    我使用的是 Ubuntu 14 04 sudo apt get update总是给我这个选项来配置 mysql apt config 我尝试选择版本 按 tab gt 在 确定 上突出显示的键 按 Enter 但没有任何反应 它再次返回并突
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • 如何在查询语句之外从mysql查询中获取值?

    这是下面的函数console log function quo value value connection query SELECT role from roles where id 1 function error results fi
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 使用“INSERT ... ON DUPLICATE KEY UPDATE”插入多条记录

    我的表结构 table marks 我的目标 我想用条件插入或更新多条记录 我目前正在通过此查询进行检查 第一步 SELECT FROM marks WHERE student 115 AND param 1 第二步 if records

随机推荐

  • 使用 gcc 的中间 GIMPLE 格式

    根据本文 http en wikipedia org wiki Intermediate languagegcc 在生成代码之前使用多种中间格式 我读到 GIMPLE 格式使用三个地址代码 这似乎是最容易使用的中间语言 但我需要更多细节 因
  • 从管理页面删除 Django 中的 ManyToManyField 并单击按钮

    我有两个模型如下 模型 py from django db import models from django contrib auth models import User class Skill models Model skill m
  • 通过SSIS动态创建Excel表

    在 SSIS 中使用执行 SQL 任务 创建的 Excel 文件 包含多个列和不同的数据类型 这里的问题是 INT Money 列在 Excel 中显示为文本列 即使 Excel 表是使用 Int Money 数据类型创建的 我尝试过使用双
  • UITextField 清除按钮不显示

    I want to show a clear button always in a UITextField I have tried to both set this in xib Interface Builder and in code
  • 如何在警报或确认框中显示粗体文本?

    如何获取粗体文本并更改警报或确认框中文本的颜色 var conFrm confirm Following List s already Sent n strong List Name strong ss replace n b Name b
  • 如何使用 Jackson 重命名 JSON 序列化中的根密钥

    我正在使用 Jackson 对对象列表进行 JSON 序列化 这是我得到的 ArrayList id 1 name test name 但我想要这个 rootname id 1 name test name ie showing the s
  • 将两个 .less 文件合并为一个

    假设我少了两个文件 first less a b font size 13px color lime and second less import first less a font family sans serif 我想要一种将它们组合
  • 您知道 PAC 设计模式的任何示例吗?

    任何人都可以指出正在使用的任何网站或网络应用程序表现 抽象 控制 http www dossier andreas net software architecture pac html设计模式而不是MVC 像这样的桌面应用程序很容易找到 例
  • 如何在android中的地图触摸位置上动态绘制形状

    我想绘制一个形状 无论用户在哪里触摸地图 都应该动态绘制 我对绘制这些形状没有任何想法 我怎样才能做到这一点 我可以通过画布完成这个工作吗 我正在使用 MapFragment 请看图片 请给我任何想法 任何帮助表示赞赏 您可以通过添加一个来
  • 在 yii2 gridview 中输入时进行过滤

    我需要在您键入时过滤网格视图 默认情况下 仅当按下回车键时才进行过滤 您应该使用自己的 js 来处理这个问题 例如 this gt registerJs body on keyup yiiGridView grid id filters i
  • Objective C 中如何对数组进行排序? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 iPhone 中对包含数字作为字符串的数组进行排序 https stackoverflow com questions 6097119 how to sort array having num
  • 在本地主机中保存更改后,React 组件不会在浏览器中重新加载

    我使用 Create React App 创建了一个新的 React 项目 在旧项目中 每当我在组件中进行更改并保存组件时 它都会反映在浏览器中 但在新项目中 当我保存代码中的更改时 浏览器不会重新加载 也不会反映更改 所以我停止了正在运行
  • Nginx反向代理返回404

    我的 Nginx 安装并运行 下面是配置 etc nginx nginx conf 我要全部转发 api 到我的 tomcat 服务器 该服务器在同一服务器上的端口 9100 上运行 类型http myhost 9100 api apps有
  • ActivityManager.getRunningTasks 已弃用 android

    我正在 android 中处理推送通知 我使用下面的方法来显示通知 但问题是现在 ActivityManager getRunningTasks 1 正在被弃用 从一个 stackoverflow 问题中我读到 你可以使用getAppTas
  • 如何删除html中单击的元素周围的虚线

    我发现如果有一个a页面中的链接不链接到新页面 那么当用户单击它时 该元素周围会有一条虚线 只有当用户单击页面中的其他任何内容时它才会消失 如何删除它 Example 注意元素周围的虚线Section 2 Use outline none锚定
  • 如何在 IDE 中输入提示上下文?

    我在用Closure call http php net manual en closure call php http php net manual en closure call php 在类上下文中调用外部闭包 这是一个简单的重现 c
  • 索引多列并匹配不同的值,返回跨列的唯一值列表

    我已经在漫长的几周内广泛寻找解决我的问题的方法了 我提出了一个部分有效的解决方案 我将其包含在底部 供那些可能知道如何修改 扩展它们以解决问题的人使用 这就是我想要完成的任务 以下描述参考此屏幕截图https i stack imgur c
  • 从两个不同的表中减去值

    考虑表X A 1 2 3 3 6 考虑表 Y A 0 4 2 1 9 如何编写一个查询来获取这两个表之间的差异 以计算下表 例如表 Z A 1 2 1 2 3 目前尚不清楚你想要什么 会是这个吗 SELECT SELECT SUM A FR
  • PHP 会话锁定并使用 Memcache 存储会话

    我有一个标准的 html 页面 其中有一些 img 标签 每个标签都指向我们服务器上的一个 php 文件 加载 php 文件时 它会在生成图像之前将一些数据保存到会话中 来自每个脚本的会话中的数据随后将在我们的应用程序中的其他脚本中使用 生
  • 如何向表示多对多关系的 MySQL 闭包表添加排序顺序?

    这是我的问题的后续 如何在MySQL中实现多对多的层次结构 https stackoverflow com questions 9691366 how to implement a many to many hierarchical str