我有一个名为“Student_fees_存款”的表,在该表中,一列包含多个值。
学费存款
id | amount_detail
---|----------------
1 |{"1"{"amount":"5000.00","date":"2022-12-15","amount_discount":"5000.00"}}
2 | {"1":{"amount":"9000.00","date":"2022-12-15","amount_discount":"5000.00"}}
我怎样才能得到id = 1的金额值5000.00?
4条答案
按热度按时间smdncfj31#
您的第一个条目中有一处打字错误,缺少“:“
f3temu5u2#
该数据类型是JSON。
MariaDB从10.2.7开始支持JSON,并且有很多functions可供使用。
MySQL从5.7.8(their document)开始支持JSON,并且有很多functions可供使用。
它们之间有一些区别-例如:MariaDB do not support column path operator(
->
,->>
)。因此,您只能在MySQL上使用此函数。您可以使用此SQL语句获取值。
JSON_VALUE()
和JSON_EXTRACT()
之间的区别在于JSON_EXTRACT()
在结果中包含双引号和方括号([".."]
)。(使用MariaDB测试)结果(MariaDB):
【"5000.00"】
结果:
5000.00
PHP中的示例代码。
q8l4jmvw3#
您可以使用
substring_index()
:8wtpewkr4#
这能回答你的问题吗?
实际上,您不应该在数据库中存储
JSON
,我宁愿放置3个单独的列(amount
、date
、amount_discount
),而不是存储JSON
,因为对JSON
数据运行复杂的查询非常困难,而且它往往会违反规范化规则。只需将
JSON
拆分为单独的列,您就可以轻松地重新构建表,使其更易于维护、更有结构,并且总体上更客观。将来应该避免的另一件事是将
Arrays
存储在数据库中,因为这可以很容易地用1:M
关系实现,它也可以强制执行规范化规则3。下面是我在自己的数据库上尝试的一个工作测试: