【问题标题】:mysql select specified key_name and key_value from json encode fieldmysql 从 json 编码字段中选择指定的 key_name 和 key_value
【发布时间】:2015-01-16 19:23:02
【问题描述】:

我想用mysql显示一个字段的指定key_name和key_value,其中记录是json编码格式

id_user           dtl_master              date    
  1         {"el1":"2","el2":"3"}       2015/01/01
  2         {"el1":"2","el2":"3"}       2015/01/01 
  3         {"el1":"5","el2":"6"}       2015/01/01

我的过滤选择查询是

SELECT id_user,dtl_master FROM tb_inputdata WHERE dtl_master REGEXP '"el2":"([^"]*)4([^"]*)"';

但它会返回:

 id_user           dtl_master            
      1         {"el1":"6","el2":"4"}          

我想这样显示

 id_user              el2            
   1                   4     

我知道 REGEXP 不在 SELECT 上运行,而只在 WHERE 上运行,有人知道如何只选择相关的 key_name 或 key_value 吗?

谢谢

【问题讨论】:

  • 还有大量数据,我应该将每一对变量和值保存在同一个字段上,所以现在 json 格式是解决方案
  • 如果您的应用程序手动对内容进行编码并将其放入数据库中,那么您的应用程序逻辑本身也必须注意再次展开它。
  • 糟糕的设计,但是在从结果中获取行时只使用json_decode 并使用el2
  • 您好,出于某种原因(内存和效率),我不想在应用程序(php)中显示和解析它,我首先尝试在 mysql 上执行此操作

标签: php mysql regex json


【解决方案1】:

我建议使用 NoSQL,但提取它的一种方法是:

SELECT id_user, common_schema.extract_json_value(dtl_master,'/el2') AS el2 WHERE dtl_master REGEXP '"el2":"([^"]*)4([^"]*)"';

如果您打算获得common_schema。安装文档here.

当然,您始终可以通过SELECT输入PREG_REPLACE() 值来选择使用正则表达式。这也不是 MySQL 的默认设置。你需要得到类似this的东西。

【讨论】:

  • common_schema 是默认的 MySQL,还是你必须添加的东西?
  • @mopo922 这是您必须添加的内容。如果他要使用 JSON,他也可以。
  • 感谢您的回答,但它需要安装额外的东西code.google.com/p/common-schema 根据文档,extract_json_value() 也是 CPU 密集型的。我还在等待另一个答案
  • 您能否添加说明以获取common_schema 的答案?
  • @ReidsMekeMeke 您将收到的最佳答案是切换到 NoSQL。虽然我也在等。
猜你喜欢
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
相关资源
最近更新 更多