在MySQL中搜索LIKE json对象

mspsb9vt  于 2023-01-03  发布在  Mysql
关注(0)|答案(3)|浏览(253)

假设在我的sample_table中存在字段json_field(字符串化的JSON对象,具有property_1property_2
我如何选择像这样的请求:WHERE property_1 LIKE %VALUE_1% AND property_2 LIKE %VALUE_2%而不提取所有的数据和搜索与php?
是的,我知道,这是一个错误,保持json字符串在字段中

0md85ypi

0md85ypi1#

你不能。
如果你想在你的脚本中获取数据,你必须获取它们。用参数构建动态请求。类似于:

"...WHERE property_1 LIKE '".$value_1."' AND property_2 LIKE '".$value_2.'";
zu0ti5jz

zu0ti5jz2#

不熟悉php,但是一个好的数据库接口应该允许你执行任何选择语句,所以根据https://dev.mysql.com/doc/refman/8.0/en/create-table-secondary-indexes.html#json-column-indirect-index你应该能够基于JSON类型列中的属性进行查询。
即使使用where col-〉"$.propertyName”= xxx也可以。使用类似“xxx%”的前缀搜索似乎不能正确工作。但是使用上面链接的页面。您应该能够在频繁搜索的字段上创建一个生成的列,并基于它创建索引,像常规列一样搜索。

w51jfk4q

w51jfk4q3#

基本上是JSON_EXTRACT()+ LIKE + quote()(如果使用PDO)或真实的_escape_string()(如果使用mysqli)

$db->query("SELECT * FROM sample_table WHERE
 JSON_EXTRACT(`json_field`, '$.property_1') LIKE "
 . $db->quote("%{$VALUE_1}%").
" AND JSON_EXTRACT(`json_field`, '$.property_2') LIKE "
 . $db->quote("%{$VALUE_2}%")

相关问题