问题标签 [stored-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1746 浏览

mysql - 为什么这个 MySQL 存储函数给出的结果与在查询中进行计算不同?

这是一个关于使用半正弦公式计算地球上经纬度两点之间距离的问题,用于需要“找到我最近的”功能的项目。

在这篇文章的 MySQL 中,haversine 公式得到了很好的讨论和解决。

然后我问了这个关于将其转换为存储函数的问题,以便它可用于未来的项目,而无需查找、记住或重新输入长格式的公式。

都很好。除了我的函数在结果上(略有不同)与直接在查询中输入公式不同,其他所有条件都相同。为什么是这样?

所以这是我写的函数:

这是一组测试查询,用于查找伦敦眼和白金汉宫之间的距离,仅作为示例。显然,通常您会用您想要比较的地理定位“事物”数据库中的字段替换目的地。

在示例中,我们使用英里 - 因此我们将半径(测试中的@milesModifier ,函数中的半径)精确设置为 3959。

我得到的结果很有趣(在 MySQL 5.2.6 社区版上),亮点:

longFormat是查询中完成的数学运算,distanceMiles是函数的结果。

结果是不同的......好吧,所以就在项目中使用该函数而言,它是微不足道的,但我很想知道函数内部或外部的相同公式如何产生不同的结果。

我猜这与 FLOAT 的长度有关 - 它们没有在函数中指定,我尝试指定它们(最多 30,15)为我拥有的所有数字和输出提供足够的空间我期待 - 但结果仍然略有不同。

0 投票
2 回答
913 浏览

php - 在我需要的 php 文件中包含所有函数还是只包含我需要的函数?

所以这就是我想要做的。

  1. 第一种选择是将每个函数分别写入不同的 php 文件中,然后将它们全部包含在一个名为 include functions.php 的 php 文件中,每当我创建一个新页面时,假设 index.php 我只包含“functions.php”。 php";

    为什么我需要这样做?因为我只需要包含一个文件,所有功能都将包含在内。现在问题可能是服务器负载。我不确定有多少未调用的函数会影响性能。

  2. 第二种选择是再次创建我需要的文件,将它们组合起来,然后每当我需要一个函数时就调用它。这样做的缺点是我需要做更多的工作才能进行分类,而且我必须包含很多文件

所以我想问一下,第一个选项是否会增加我必须转到第二个选项的 CPU 和内存负载?第一种方式是否存在任何性能问题,或者 php 根本没有解析未使用的函数?

0 投票
0 回答
101 浏览

mysql - 是否可以使用 MySQL 存储函数返回字典类型的对象?

我希望 MySQL 存储函数能够返回字典类型的对象(包含键值对且可扩展的对象)。

现在,我正在考虑以 JSON 格式返回一个字符串。

有没有其他方法可以做到这一点,最好是 MySQL 原生的东西?

0 投票
1 回答
8209 浏览

mysql - MySQL 存储函数 - 动态/变量表和列名

今天早上我正在学习 MySQL 中的存储过程/函数/触发器,我在尝试在查询中使用变量表和列名时遇到了一些问题。

这是导致我出现问题的第一个函数(getCategoryName),我需要用 @ 标记的两个变量作为表/列名称 - 这两行:

如果可能,我想将此函数保留为函数而不是过程,但如果这是唯一的方法,我会接受过程的答案。

谢谢你的帮助,

理查德

0 投票
1 回答
119 浏览

mysql - 使用第二个存储过程中的值调用存储过程以产生单个结果?

我已决定自学 MySQL 中的存储过程,但由于语法与我通常的基础(php/javascript)完全不同,我希望确定我对这些过程功能的理解是否正确,如果是的话,我如何实现我所追求的。

目前,我有两个表,“人”和“帖子”,如下:

由此,我创建了一个简单的通用存储过程,如下所示:

到目前为止一切顺利,但现在我的理解崩溃了......我想创建第二个名为“getPost”的过程,当传递一个 post_id 时,它会从帖子表中的相应行返回帖子数据,而且在 author_id 列上调用 getPerson 过程,以便返回的单个结果将包含以下字段:post_id, long_name, index_name, body_text, created

我已经试错了几个小时,虽然我可能曾经有过正确的方法(在 getPerson 的结果上使用连接?),但我的 sql 语法并没有超出单语句 MySQL 调用的范围来自 PHP。我的问题是:

  1. 这是我想做的常见/合理的方法还是有更好的方法?(我不想使用脚本语言)
  2. 如果是这样,有人可以分享如何做到这一点吗?
  3. 我对这种事情使用程序是正确的,还是一个功能一样好/更好?

谢谢你的帮助!

0 投票
5 回答
8375 浏览

mysql - 在 SQL 中计算 2,3 四分位数平均值

我想在 SQL (MySQL) 中编写一个存储过程来计算第二和第三四分位数的平均值。

换句话说,我有测量 URL 加载所需时间的记录。记录是 (id,url,time),它们是每个 URL 的许多测量值。我要做的是为每个 URL 删除最低和最高 25%(即下四分位数和上四分位数)并计算剩余 25%-75% 的加载时间的平均值。并将其存储到另一个表中。

我看到了一些针对 MS SQL 的示例,并且似乎相对容易。但我必须在哪里使用 MySQL:

  • LIMIT 子句不支持百分比(没有选择前 25% 的类比)
  • LIMIT 子句不支持将其参数作为变量(仅常量)
  • 函数不支持动态 SQL(例如 PREPARE 和 EXECUTE )

我到了这里:

我可以用 PHP 编写它,但认为在 SQL 中它会有更好的整体性能。我将非常感谢一些帮助。

0 投票
2 回答
17567 浏览

mysql - 如何在 MySQL 上正确循环存储函数?

我在获得一个非常简单的存储过程时遇到了一些困难。考虑以下文章表格片段:

一个简单的分层表,使用写时复制。编辑文章时,当前文章的 replace_by 字段设置为其新副本的 id。

我添加了一个 baseID 字段,将来应该存储文章的 baseID。在我上面的示例中,有一篇文章(例如 id 3)。它的 baseID 为 1。

为了获取 baseID,我创建了以下存储过程:

看起来很简单,直到我实际使用以下方法调用该函数:

我希望该函数返回 1。我什至愿意理解它可能需要一秒钟。相反,机器的 CPU 上升到 100% (mysqld)。

我什至使用REPEAT .. UNTIL和 with重写了相同的函数WHILE .. DO,最终结果相同。

谁能解释为什么我的 CPU 在进入循环时会上升 100%?

旁注:我只是想赢得时间。我在 PHP 中创建了完全相同的函数,它运行良好,但我们的猜测是 MySQL 可以稍微快一点。我们需要筛选大约 1800 万条记录。我能节省的任何时间都是值得的。

提前感谢您的任何帮助和/或指示。


解决的SQL:

0 投票
1 回答
642 浏览

mysql - 存储函数:如何将多个 varchar 添加在一起?

我尝试使用 mysql 存储函数将两个 varchar 合二为一?

就像 php ($ var1. $ var2) 或 javascript´s (var1 + var2)

它似乎不适用于加号(p_email+p_password)。

问候无效代码。

0 投票
1 回答
15887 浏览

mysql - 在存储函数中返回数组

我试图在 MySQL (5.x) 的 WHERE 语句中使用存储函数的结果,但它失败了,因为在函数中我从表中选择值到一个 INT 变量然后返回它们/它,这显然如果 SELECT 返回超过 1 行,则不起作用。我试过返回一个 TABLE(因为我理解 TABLE 在 MySQL 中表示数组),但这也不起作用。

有什么方法可以让我做类似的事情:

谢谢你。

0 投票
1 回答
2324 浏览

mysql - 在 MySQL 函数调用中使用 Select 语句

在下面的 MySQL 存储函数调用中,我不想手动输入 lat long 坐标,而是从另一个表中选择一个多边形进行测试。我在正确使用语法时遇到问题。

So, I'd like to remove 43.40930419213147, -72.5537109375 43.40884544242924, -72.53695249557495 43.38754804789373, -72.5437331199646 43.378580946950244, -72.58398771286011 43.40930419213147, -72.5537109375

相反,我想使用这个选择语句:

我有多边形存储在neighbor_shapes 中。其结构如下:

  • 邻域索引 smallint(3)
  • 邻里 varchar(50)
  • 邻域多边形(几何)

附加信息:

IS_POINT_IN_POLYGON 调用如下: IS_POINT_IN_POLYGON(p POINT, poly POLYGON)

有什么建议么?