假设在我的sample_table中存在字段json_field(字符串化的JSON对象,具有property_1、property_2) 我如何选择像这样的请求:WHERE property_1 LIKE %VALUE_1% AND property_2 LIKE %VALUE_2%而不提取所有的数据和搜索与php? 是的,我知道,这是一个错误,保持json字符串在字段中
基本上是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}%")
3条答案
按热度按时间0md85ypi1#
你不能。
如果你想在你的脚本中获取数据,你必须获取它们。用参数构建动态请求。类似于:
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%”的前缀搜索似乎不能正确工作。但是使用上面链接的页面。您应该能够在频繁搜索的字段上创建一个生成的列,并基于它创建索引,像常规列一样搜索。
w51jfk4q3#
基本上是JSON_EXTRACT()+ LIKE + quote()(如果使用PDO)或真实的_escape_string()(如果使用mysqli)