【发布时间】: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 这意味着如果我想过滤行,我必须更改整个逻辑以插入,否则我无法通过查询过滤行?