我有一个php表单,当提交时发送表单值到一个名为“酒店”的MySQL数据库中,在一个名为“预订”的表中,有一个标题为“表单”的列。在" form“列中,每个表单字段都包含在{}中,字段之间用逗号分隔。下面是"Form“列中的数据:
[{"id":"1","translation":"Token","value":"123456789"},
{"id":"2","translation":"Name","value":"John Smith"}]期望的MySQL查询结果:我想获取查询中的每个“翻译”和“值”,并将它们放在单独的列中。列1标题"Token",列2标题"Name“,然后在下面列出每个值
--------------------------
| Token | Name |
--------------------------
| 123456789 | John Smith |
--------------------------我以前从未在列中遇到过这种类型的数据,所以我不确定如何创建查询。我在想也许是子字符串?任何帮助或指导都是非常感谢的。如果需要我提供更多信息来帮助处理请求,请让我知道。
发布于 2015-09-02 01:14:01
表单列的数据格式为json。只需获取列值并使用php函数$result = json_decode( data );现在$result以数组格式保存数据。使用for each迭代数组并获取每个值。
发布于 2015-09-02 01:21:28
首先,让我们使用json_decode()将Form列中的JSON字符串转换成一个数组。假设您已经从Form列中检索到值并将其赋值给变量$form
$form = json_decode($form,true);接下来,我们将检索Token值和Name值:
$token = $form[0]["value"];
$name = $form[1]["value"];注意:这假设'token‘总是出现在'form’字符串的第一个,而'name‘总是出现在第二个。
发布于 2015-09-02 01:25:40
你可以这样做:
获取值的示例:
SELECT REGEXP_REPLACE('[{"id":"1","translation":"Token","value":"123456789"},{"id":"2","translation":"Name","value":"John Smith"}]',
'^.*"translation":"Token","value\":"([0-9]+)".*$','\\1') AS Token;结果: 123456789
SELECT REGEXP_REPLACE('[{"id":"1","translation":"Token","value":"123456789"},{"id":"2","translation":"Name","value":"John Smith"}]',
'^.*"translation":"Name","value\":"(.*)".*$','\\1') AS Name;结果:约翰·史密斯
要更新表格,请执行以下操作:
update TABLENAME set
TOKENFIELD = REGEXP_REPLACE(JSONFIELD,{"id":"2","translation":"Name","value":"John Smith"}]',
'^.*"translation":"Token","value\":"([0-9]+)".*$','\\1'),
NAMEFIELD = SELECT REGEXP_REPLACE(JSONFIELD,{"id":"2","translation":"Name","value":"John Smith"}]',
'^.*"translation":"Name","value\":"(.*)".*$','\\1');https://stackoverflow.com/questions/32337122
复制相似问题