- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一张 table :
id
first
last
institution
address
space1_1_value
space1_2_value
space2_1_value
space2_2_value
space3_1_value
space3_2_value
agreement
(为了举例,这被削减了字段数)。
我最初需要将每个“空间 x”分组(即:space1.x、space2.x、space3.x)分解为它自己的 ROWS(即使所有数据都在 1 条记录/行中)
id | first | last | institution | address | space1_1_value | space1_2_value | agreement
如果 space2_1_value 中有值则:
id | first | last | institution | address | space2_1_value | space2_2_value | agreement
如果 space3_1_value 中有值则:
id | first | last | institution | address | space3_1_value | space3_2_value | agreement
这是通过使用以下查询得出的:
SELECT first, last, space1_1_value as space_value FROM report
UNION ALL
SELECT first, last, space2_2_value as space_value FROM report WHERE space2_2_value <> ''
UNION ALL
SELECT first, last, space3_3_value as space_value FROM report WHERE space3_3_value <> ''
ORDER BY first
然而,我的任务是进一步分解它,但我不确定这是否可以通过查询实现,或者实际上是否需要在后端/PHP 方面完成?
因此请牢记上述指令(这是一项要求):
因此对于每个 SPACE1.x 组,都有一个包含逗号分隔值的列。
为此,我们假设所有 space1_2_value、space2_2_value 和 space3_3_value 列都包含如下内容:
March 3,March 5,March 6
March 1,March 2
Feb 27
例如。
因此每个列可以有 1 到多个逗号分隔值。
在 MySQL 中有没有办法分解这些值,并为每个值返回一个镜像行?或者需要在后端 (PHP) 端完成一些简单的事情?
我花了几分钟时间思考如何用 PHP 来完成。
但是我陷入了没有任何索引的 foreach() 循环? (或者只是一个带索引的普通 for() 循环,但检查每个 $value 是否为空(手动)的开销并不大。
最佳答案
这可以在 sql 中完成。一种方法是使用仅包含整数的“辅助表”,您可以加入
您的数据以多次获取您的行,然后仅提取第 n
子元素。
试试这个:
-- helper table with a listof integers from 1 to 10
create table _int_1_10 (id int primary key);
insert into _int_1_10 (id)
values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
-- some example data
create table test_strexplode (
id int primary key,
space_value_1 varchar(200),
space_value_2 varchar(200)
);
insert into test_strexplode (id, space_value_1, space_value_2)
values (1, 'row 1', 'March 3,March 5,March 6 March 1,March 2 Feb 27'),
(2, 'row 2', 'March 3,,March 5'),
(3, 'row 3', '');
select space_value_1,
_int_1_10.id,
-- extracts the "_int_1_10.id"th element
SUBSTRING_INDEX(SUBSTRING_INDEX(
space_value_2,',',_int_1_10.id),',',-1) as subentry
from test_strexplode
join _int_1_10
on _int_1_10.id <=
-- number of elements in your string (= number of "," + 1)
char_length(space_value_2) - char_length(replace(space_value_2, ',', '')) + 1
order by test_strexplode.id, _int_1_10.id;
这会给你:
+---------------+----+-----------------+
| space_value_1 | id | subentry |
+---------------+----+-----------------+
| row 1 | 1 | March 3 |
| row 1 | 2 | March 5 |
| row 1 | 3 | March 6 March 1 |
| row 1 | 4 | March 2 Feb 27 |
| row 2 | 1 | March 3 |
| row 2 | 2 | |
| row 2 | 3 | March 5 |
| row 3 | 1 | |
+---------------+----+-----------------+
我使用了缺少一些 ,
的示例数据,这就是为什么结果包含例如3 月 2 日、2 月 27 日
。还要注意一些子条目是空的(因为我的示例数据包含空条目);您可能想也可能不想过滤掉它们。您的整数表显然必须至少包含您希望在任何行中包含的最大元素数的数字(如果它包含 0
或负数,请在on
-子句)。
substring_index(str,delim,count)
返回 count
分隔符 delim
出现之前的字符串 str
的子字符串。对于正数,subentry
的完整语句将返回第 _int_1_10.id
个元素,如果字符串的元素较少,则返回最后一个元素。
on
子句因此计算元素的数量(通过计算 ,
的数量)以防止多次获取最后一个元素。如果您的字符串不包含任何空元素(如我的示例数据中的 ,,
),您不需要该部分,但可以添加一个空元素来标记列表的末尾。
您可以将此代码应用于整个结果集,例如通过使用
...
from (select ...
space1_1_value as space_value_1,
space1_2_value as space_value_2
...
union all ... union all ... ) as test_strexplode
join _int_1_10 ...
它会工作,但可能会很慢。它不能在 space*_2_value
列上使用索引,并且必须进行大量连接和字符串评估。但是,除了规范化数据之外,您对此无能为力。
在 sql 中执行此操作是否有用可能取决于您对数据执行的操作。如果您只是打算在网页上的 html 表中显示它,则在 php 中循环遍历数组可能既简单又快捷。要对结果集进行排序、过滤或join
,在sql 中实现起来可能更容易(而且可能更快),即使您在框架中使用它也是如此。如果您要更新这些值,在 php 中会更容易,因为它很可能在 sql 中变得一团糟(在此结果集上) .
关于php - 这可以在 MySQL 查询中完成,还是需要在 PHP 中完成? (服务器端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45289737/
我在使用 Jade 和 express 时遇到了一些问题。这是 serder 端: router.get('/login', function (req, res) { res.status(2
是否可以使用 JavaScript 服务器端,从而在某些核心计算中不会显示在页面源代码中? 我正在开发一款游戏,代码的一个关键部分只需要在服务器端计算然后传回客户端。 我的整个游戏都是用 Javasc
我正在寻找有关如何使用 ExtJS 4 实现安全页面的信息。我所说的安全页面是指用户将使用 Siteminder (SSO) 登录我们的网站,因此我们将拥有用户的身份。然后我们将通过进行数据库/LDA
我的 Centos 7 服务器正在运行 apache 2.4.6,并且正在使用 mod_wsgi 提供 django webapp。我的问题是我无法从另一台计算机的浏览器访问服务器 url。我没有从
我们收到了客户的请求,要求我们基于 ExtJS 框架构建 Web 应用程序。我查看了互联网,发现 ExtJs 只是一个客户端 javascript 控件,但我认为 Web 应用程序也必须具有服务器端
我有三个组件。 组件一包含组件二和三。 组件二是一个列表。 组件三用于向数据库添加项目。 当我将一个项目保存到数据库时,我想更新组件二中的列表。 我怎么做? 最佳答案 设想 让我们假设:
欢迎, 我正在寻找能使我以尽可能高的格式下载youtube视频的youtube api。 几年前,这项工作更为简单,因为url拥有关于质量的信息,例如“fmt = 22”或“fmt = 6”,我们现在
我想将电子邮件 x@x.com 的用户密码设置为“an”。但代码不起作用。这是我的云代码: Parse.Cloud.define('testSetPasswordForUser', functio
正在阅读http://cocoawithlove.com/2010/03/streaming-mp3aac-audio-again.html这篇文章,想知道如何在服务器端实现它,是否像将文件放在htd
我有一个使用一些 css/javascript 选项卡的 php 脚本,它们在我的本地服务器上运行,但当我上传到我的在线服务器时则不起作用。 只是想知道是否有人知道为什么会出现这种情况?所有路径都
是否可以从 JavaScript 脚本获取服务器端页面的源代码?我希望能够获取服务器上同一文件夹中的页面的源代码。除了javascript之外,是否可以不使用任何其他东西? 最佳答案 如果您想从 ja
.NET 4.0 我正在寻找在我们的服务器上生成Word文档的最简单方法。 局限性: 服务器端 我不想在服务器上安装word 数据源是XML 我试图用XSLT生成快速简单的DOCX,但是我可以找到的用
我正在使用 native jQuery 验证库来验证在联系表单中输入的电子邮件地址。由于这是一个表达式引擎站点,因此我使用其电子邮件验证器作为服务器端备份。 当我输入 test@b.c 时,jQuer
我使用带有服务器端处理的数据表来显示数万行。我需要通过复选框过滤这些数据。我能够制作一个工作正常的复选框,但我不知道如何添加多个复选框以协同工作。我找到了 similar solution在这里,但我
我正在尝试编写一个消息传递应用程序,并且我能够发送消息(显示为服务器客户端正确显示消息)但随后将我的客户端踢出服务器。服务器打印以下错误: java.io.EOFException at java.i
如果设备是移动设备,如何防止侧边栏加载服务器端资源?我了解如何通过 CSS 隐藏,但我更感兴趣的是防止对服务器的调用。 最佳答案 WordPress有一个名为wp_is_mobile()的函数它将检查
我有一个返回 text/event-stream 数据的网址,因此我尝试连接并打印我找到的所有内容: var url = "..." var source = new EventSource(url)
我得到这样的错误列表:{ error: [ "Email is required", "First Name is required"] } 我需要如何修改它,以获取包含字段名称的列表? public
我正在尝试使用 ASIFormDataRequest 将数据发送到 ASP.net 服务器端。我创建了一个aspx页面。目前我可以得到这两个纯文本。但是我不知道如何通过 Request.Form 在
我在 ${host}/api/graphql 有一个可通过 POST 访问的快速 graphql 端点。 在那条路线上,我有身份验证中间件,如果用户未登录,我想重定向到登录页面。 看起来有点像这样。
我是一名优秀的程序员,十分优秀!