MySQL foreach 循环

2023-11-25

我必须迭代 MySQL 中的 User 表中的每一行。 我需要为用户中的每次迭代创建一个新行地址,并具有下面描述的一些条件。

我有3张桌子:

User: id, stuff, id_person, email
Person: id, stuff, id_address
Address: id, email

如果 User.id_person 不为 NULL 并且 person.id_address 为 NULL,我需要在 Address 中创建一个新行。 我必须使用与 User.email 相同的电子邮件创建行。 我必须对 User 中的每一行执行此操作。

我尝试使用 MySQL 游标,但我不知道如何很好地使用它们。

我怎样才能做到这一点?除了使用光标之外还有其他方法吗?

提前致谢。

编辑:我刚刚意识到我还必须使用我刚刚创建的地址行的 id 更新 person.id_address 。


据我所知,只要字段是您提供的,以下内容就足够了。

INSERT INTO Address (email)
  SELECT User.email
    FROM User JOIN person ON User.id_person = person.id
   WHERE person.id_address IS NULL
;

编辑(用光标)

使用光标这应该非常简单,但是我强烈建议您熟悉这些及其含义。

DROP PROCEDURE IF EXISTS _tmp_update_address;
DELIMITER $$
CREATE PROCEDURE _tmp_update_address()
BEGIN
   DECLARE cursor_List_isdone BOOLEAN DEFAULT FALSE;
   DECLARE cur_userId, cur_personId INT;
   DECLARE cur_email VARCHAR(250) DEFAULT '';

   DECLARE cursor_List CURSOR FOR 
      SELECT User.id, person.id_address, User.email
      FROM User JOIN person ON User.id_person = person.id
      WHERE person.id_address IS NULL
    ;

   DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursor_List_isdone = TRUE;

   OPEN cursor_List;

   loop_List: LOOP
      FETCH cursor_List INTO cur_userId, cur_personId, cur_email;
      IF cursor_List_isdone THEN
         LEAVE loop_List;
      END IF;

      INSERT INTO Address (email) VALUES (cur_email);
      UPDATE person SET person.id_address = LAST_INSERT_ID()
         WHERE person.id = cur_personId;

   END LOOP loop_List;

   CLOSE cursor_List;
END

$$

DELIMITER ;

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

MySQL foreach 循环 的相关文章

  • POINT 列上的 MySQL INSERT/UPDATE

    我正在尝试用我国家的地理位置填充我的数据库 我的一张表有 4 个字段 ID PK 纬度 经度和地理点 EDIT SCDBs Punto Geografico SET lat 18 469692 SET lon 63 93212 SET g
  • 仅当值发生更改时如何插入数据库?

    我需要更新 替换 MySQL 数据库中的字段 但前提是它们已更改 该表包含 ID 文本字段和更改日期 用户根据更改日期通过 ID 查询数据 即 如果该日期早于用户上次查询数据的时间 则他不想要它 仅当文本字段与具有相同 ID 的现有文本字段
  • 如何优化这个MySQL慢(非常慢)查询?

    我有一个 2 GB 的 mysql 表 包含 500k 行 我在没有负载的系统上运行以下查询 select from mytable where name in n1 n2 n3 n4 bunch more order by salary
  • MySQL 通过 current_timestamp 选择上个月的数据

    直到今天 当我使用 MySQL 并需要对日期 时间执行操作时 我使用带有 unix 时间戳的 int 列 没有出现任何问题 但今天在阅读了一些指南后 我决定默认使用 current timestamp 测试时间戳列 所以我感兴趣如何按列选择
  • While 在范围内循环用户输入

    我有一些代码 我想要求用户输入 1 100 之间的数字 如果他们在这些数字之间输入一个数字 它将打印 Size input 并打破循环 但是 如果他们在外部输入一个数字1 100 它将打印 大小 输入 并继续向他们重新询问一个数字 但我遇到
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • 使用 JSON 文件动态更新 HTML 内容?

    我想创建一个 JS 循环 使用 jQuery 来查看 JSON 文件 并根据是否 div ids 与 JSON id 值匹配 这需要易于扩展并且无论有多少人都可以工作 div 添加了盒子 我有一个 HTML 文件 设置如下 div clas
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • 删除行导致锁超时

    当我尝试从表中删除行时 我不断收到这些错误 这里的特殊情况是我可能同时运行5个进程 该表本身是一个 Innodb 表 约有 450 万行 我的 WHERE 子句中使用的列没有索引 其他指数按预期运行 这是在事务中完成的 首先删除记录 然后插
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • Bash 中单行 while 循环的语法

    我无法找到分号和 或大括号的正确组合 我想这样做 但作为命令行中的一句 while 1 do foo sleep 2 done while true do foo sleep 2 done 顺便说一句 如果您在命令提示符下将其输入为多行 如

随机推荐

  • OpenCV 将 Canny 边缘转换为轮廓

    我有一个 OpenCV 应用程序 由办公室内部的网络摄像头流 很多细节 提供 我必须在其中找到人工标记 标记是白色背景上的黑色方块 我使用 Canny 查找边缘 使用 cvFindContours 进行轮廓绘制 然后使用 approxPol
  • Swift 3 中的dispatch_once 去哪儿了?

    好的 所以我发现了新的Swifty 调度 API在 Xcode 8 中 我使用起来很有趣DispatchQueue main async 我一直在浏览DispatchXcode 中的模块来查找所有新的 API 但我也用dispatch on
  • 如何以比使用 strip_tags 函数更安全的方式去除标签?

    当字符串包含 小于 和 大于 符号时 我在使用 strip tags PHP 函数时遇到一些问题 例如 If I do strip tags span some text lt 5ml and then gt 10ml some text
  • 有没有一种方法可以使用宏来检测是否包含标准标头?

    我想做一个相当于boost swap在我的环境中 可以或不可以包含标准标头 取决于项目许可和其他内容 我想让部分代码受到警卫检测器的保护 让我们考虑一个编译单元 项目特定的 前述的潜力包括 include
  • 如何从Python命令行接收正则表达式

    我想从命令行接收像 t 制表符 这样的分隔符 并用它来解析文本文件 如果我把 delimiter sys argv 1 在代码中 然后从命令行输入 python mycode py t 分隔符是 t 即 Python 会按原样保留输入字符串
  • python中接受所有泰文字符和英文字母的正则表达式

    我需要对泰语文本文档进行矢量化 例如 Bag of Words doc2vec 首先 我想检查每个文档 省略除泰语字符和英语单词之外的所有内容 例如 没有标点符号 没有数字 除了撇号之外没有其他特殊字符 对于英文文档 我使用这个正则表达式
  • C const 的默认类型是什么?

    我正在编写一些 C 代码 并注意到我认为是错误的地方 但事实并非如此 我有以下类型声明语句 const fee 然而 它最初没有被捕获 因为编译器和我没有捕获它 所以我很好奇为什么 C 允许这样做以及默认类型是什么 只有原始版本的 C 语言
  • 字节序是否只影响数字的内存布局,而不影响字符串?

    是否真的 无论架构是大端还是小端 只是数字的内存布局不同 字符串的内存布局是相同的 如果您有一个简单的 8 位字符表示 例如扩展 ASCII 那么不会 字节顺序不会影响布局 因为每个字符都是一个字节 如果您有多字节表示形式 例如 UTF 1
  • 谷歌地图两个圆的交点

    有没有一种简单的方法可以获得lat lng两个的交点 如果有 circles in 谷歌地图 API V3 或者我应该去hard way EDIT 在我的问题中 圆总是具有相同的半径 这样可以使解决方案更容易 是的 对于相等的圆 可以阐述相
  • 使用 Firebase 身份验证的 SwiftUI

    我正在尝试通过电子邮件 密码登录使用 SwiftUI Firebase 身份验证 我的问题是 有什么方法可以在用户创建帐户时将个人资料信息附加到用户的身份验证信息中 或者我必须将 Firebase Auth 与 Firestore 或 Fi
  • 什么时候应该封装泛型类型?

    我见过很多人建议您应该使用更接近您的领域的类来封装泛型类型 例如 Steve 和 Nat 建议在以测试为指导不断发展面向对象的软件 that 我们的经验法则是 我们尝试限制使用泛型传递类型 特别是当应用于集合时 我们将其视为一种重复形式 这
  • Swift - 将重载函数分配给变量

    我收到编译时错误 指出 myFunc 引用不明确 func f s String gt String return version 1 s func f sourceString s String gt String return vers
  • Mod 安全响应/请求正文大小?

    如何在 Mod Security 中获取响应 请求正文的大小 我不断收到此错误 例如 Mon Sep 17 23 34 38 2012 error client 192 168 1 1 ModSecurity Output filter R
  • WPF 中的两种方式百分比格式绑定

    我有这个文本框
  • 为什么有些网页的源代码都是一行?

    当查看很多网页的源代码 如JS CSS HTML 时 我发现它们都在一行中 他们是怎么做到的 他们使用一些工具来制作吗 我们可以重组它吗 Thanks 它是缩小的 HTML 即删除了空格 有很多工具可以做到这一点 你可以通过谷歌搜索找到它们
  • 使用 zcat 和 sed 或 awk 编辑压缩的 .gz 文本文件

    我正在尝试编辑压缩的 fastq gz 文本文件 通过删除第 2 6 10 14 行的前六个字符 我现在有两种不同的方法来执行此操作 使用 awk 或 sed 但这些仅如果文件被解压 似乎可以工作 我想编辑这些文件而不解压缩它们 并尝试了以
  • ASP.NET、VB:如何从后台代码访问 FormView 内的控件?

    我的 FormView 控件内有一个复选框和一个面板 我需要从后面的代码访问它们 以便使用复选框确定面板是否可见 这是我最初使用的代码 但由于我将控件放在 FormView 中 所以它不再起作用 Protected Sub checkGen
  • 简单的 C++ hash_set 示例

    我是 C 和 STL 的新手 我被以下存储自定义数据结构的哈希集的简单示例所困扰 include
  • 使用“grep”搜索选项卡,不带 -P

    我以前用过grep P早些时候成功了 直到我得到了一台 grep 未编译为支持 Perl 正则表达式的机器 现在我在匹配选项卡时遇到问题 t特点 grep G t matches a literal t grep E t matches a
  • MySQL foreach 循环

    我必须迭代 MySQL 中的 User 表中的每一行 我需要为用户中的每次迭代创建一个新行地址 并具有下面描述的一些条件 我有3张桌子 User id stuff id person email Person id stuff id add