【问题标题】:Can we compare value in Multi Dimensional Json encoded values in MySQL我们可以比较 MySQL 中多维 Json 编码值中的值吗
【发布时间】:2020-08-13 17:20:04
【问题描述】:

我正在使用 WordPress 平台,并使用 WP_Query 来调用我的数据,虽然可以使用自定义 MYSQL 脚本如果可以的话。

我只想添加一个可以过滤 JSON 值的 where 条件,如下所述:

所以在 postmeta 表中我有以下列

meta_key: _stock_reserve_outlet_extended
meta_value: a:2:{s:8:"outlet_2";a:2:{s:5:"stock";s:2:"20";s:5:"rider";s:2:"-1";}s:8:"outlet_1";a:2:{s:5:"stock";i:-4;s:5:"rider";i:0;}}

实际上是一个由get_post_meta()函数提取的数组

 Array ( 
      [outlet_2] => Array ( 
                            [stock] => 45 
                            [rider] => 0 
                          ) 
      [outlet_1] => Array ( 
                            [stock] => -4 
                            [rider] => 0) 
                          ) 
      )

我想在从脚本调用行期间通过比较以下内容来过滤行: outlet_2 中的库存 > 0

我尝试通过 json_search 搜索过滤器 json 值过滤,但不能通过键进行比较。

为了试一试WP_Query,我使用了以下功能,但没有显示任何效果

$args['meta_query'][] = array(
                    'key'     => '_stock_outlet_extended',
                    'value'   => array(
                                    'key' => 'stock',
                                    'value' => '18'
                                ),
                    'compare' => '>',
                );

然后我尝试了以下脚本,但也没有用:

SELECT meta_value
FROM `frbl1ozme_postmeta`
WHERE `post_id` = 3699 AND `meta_key` = '_stock_outlet_extended' AND meta_value ->'$.stock' > 1;

有人知道如何处理这类标准吗?

【问题讨论】:

  • 这里为什么会涉及到PHP序列化数据?如果它实际上是这样存储的,那么它不是 JSON。
  • 请不要说“行不通”,这无助于我们从技术层面理解您的问题。而是说发生了什么,你遇到了什么错误,以及你观察到的输出。
  • 您必须从数据库中读取该数据,然后在其上使用unserialize() 将其重新转换为 PHP 数据类型,然后您可以处理结果集并保留您想要的并释放您不想要的.如果它是 JSON,你就不能像在数据库上那样查询它,假设你有足够新的 MySQL 版本来允许它
  • @RiggsFolly 这意味着如果我想过滤行,我必须更改整个逻辑以插入,否则我无法通过查询过滤行?

标签: mysql sql wordpress


【解决方案1】:

我的观察者是,如果您使用 wordpress 的 update_post_meta() 函数保存任何数组,那么它将对其进行序列化,然后您将无法通过脚本过滤行.

所以在了解了这个事实后,我根据股票的价值条件对结构进行了更改,并与股票一起保存status,因此我可以过滤行通过 MYSQL 轻松实现。

因此,在一行答案中,直到日期为止,都无法通过 mysql 查询实现过滤序列化行。

感谢大家的帮助,特别是@RiggsFolly

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2010-10-26
    相关资源
    最近更新 更多