我有一个php表单,当提交时将表单值发送到名为" Hotel"在一个名为" Reservations"的表中有一栏名为" Form"。在" Form"列,每个表单字段都包含在{}中,字段用逗号分隔。以下是" Form"中的数据。柱:
[{"id":"1","translation":"Token","value":"123456789"},
{"id":"2","translation":"Name","value":"John Smith"}]
所需的MySQL查询结果:我想抓住每个"翻译"和"价值"在我的查询中,并将它们放入单独的列中。第1栏标题"令牌",第2栏标题"名称"然后列出每个
下面的值--------------------------
| Token | Name |
--------------------------
| 123456789 | John Smith |
--------------------------
我之前从未在列中遇到过这种数据,所以我不确定如何创建查询。我或许在思考子串?非常感谢任何帮助或指导。如果我需要更多信息来帮助处理请求,请告诉我。
答案 0 :(得分:1)
表单列在json中具有数据格式。 只需获取列值并使用php函数 $ result = json_decode(data); 现在$ result以数组格式保存数据。 用于每个迭代数组并获取每个值。
答案 1 :(得分:1)
首先,让我们获取Form
列中的JSON字符串,并将其转换为json_decode()
的数组。假设您已经从Form
列中检索了值并将其分配给变量$form
:
$form = json_decode($form,true);
接下来,我们将检索Token
值和Name
值:
$token = $form[0]["value"];
$name = $form[1]["value"];
注意:这假定'token'总是首先出现在'form'字符串中,'name'总是出现在第二位。
答案 2 :(得分:0)
你可以这样做:
获取值的样本:
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;
结果:John Smith
更新表格:
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');