Php 使用MySQL在JSON数组中搜索
我想在JSON数组中搜索某个值,但只得到一条错误消息 例如,我想在JSON数组中搜索某个国家,如果数组中包含国家id,则只选择该用户的Php 使用MySQL在JSON数组中搜索,php,mysql,json,Php,Mysql,Json,我想在JSON数组中搜索某个值,但只得到一条错误消息 例如,我想在JSON数组中搜索某个国家,如果数组中包含国家id,则只选择该用户的user\u id 我尝试使用JSON\u CONTAINS: <?php $query = "SELECT user_id FROM user WHERE JSON_CONTAINS(user_info, 'us', '$.country')"; $row = mysqli_query($conn, $que
user\u id
我尝试使用JSON\u CONTAINS:
<?php
$query = "SELECT user_id FROM user
WHERE JSON_CONTAINS(user_info, 'us', '$.country')";
$row = mysqli_query($conn, $query) or die("Error: ".mysqli_error($conn));;
while($results = mysqli_fetch_array($row )){
echo $results['user_id']."<br>";
}
?>
我的错误消息
错误:函数JSON_的参数2中的JSON文本无效,在位置0处包含:“无效值”
传递字符串时,第二个参数应为有效的JSON文档
如果目标或候选对象不是有效的JSON文档,则会发生错误
使用'[“us”]
而不是“us”
:
但是,如果我理解正确的话,您正在尝试查找那些JSON文档,其中对应于country
键的数组包含'us'
<代码>JSON_CONTAINS()不能直接用于实现这一点。您将需要使用和的组合。请注意,您只是在查找匹配项,因此第二个参数可以是Json\u Search()函数中的one
:
SET @jsn := '{"language":["en","fr"],"country":["us"]}';
SELECT
JSON_SEARCH(JSON_EXTRACT(@jsn, '$.country'), 'one', 'us');
| JSON_SEARCH(JSON_EXTRACT(@jsn, '$.country'), 'one', 'us') |
| --------------------------------------------------------- |
| "$[0]" |
现在,Json\u Search
如果任何Json\u doc、Search\u str或path参数为NULL,则返回NULL;文档中不存在路径;或找不到搜索字符串。因此,您需要在WHERE
子句中使用isnotnull
。请改用以下查询:
SELECT user_id
FROM user
WHERE JSON_SEARCH(JSON_EXTRACT(user_info, '$.country'), 'one', 'us') IS NOT NULL
传递字符串时,第二个参数应为有效的JSON文档
如果目标或候选对象不是有效的JSON文档,则会发生错误
使用'[“us”]
而不是“us”
:
但是,如果我理解正确的话,您正在尝试查找那些JSON文档,其中对应于country
键的数组包含'us'
<代码>JSON_CONTAINS()
不能直接用于实现这一点。您将需要使用和的组合。请注意,您只是在查找匹配项,因此第二个参数可以是Json\u Search()函数中的one
:
SET @jsn := '{"language":["en","fr"],"country":["us"]}';
SELECT
JSON_SEARCH(JSON_EXTRACT(@jsn, '$.country'), 'one', 'us');
| JSON_SEARCH(JSON_EXTRACT(@jsn, '$.country'), 'one', 'us') |
| --------------------------------------------------------- |
| "$[0]" |
现在,Json\u Search
如果任何Json\u doc、Search\u str或path参数为NULL,则返回NULL;文档中不存在路径;或找不到搜索字符串。因此,您需要在WHERE
子句中使用isnotnull
。请改用以下查询:
SELECT user_id
FROM user
WHERE JSON_SEARCH(JSON_EXTRACT(user_info, '$.country'), 'one', 'us') IS NOT NULL
使用PHP进行搜索与使用mysql进行搜索没有什么不同。您必须参考与json相关的mysql文档,其中包含$。country
<这似乎是一个输入错误,并且没有显示它的定义位置(as)。['user\u id']
<其中的空格计为一个字符,您还应该得到一个关于它的未定义索引警告。不建议像这样在其中存储数据,使用逗号分隔的值。有很多方法可以规范化数据库,用PHP搜索和用mysql搜索没有什么不同。您必须参考与json相关的mysql文档,其中包含$。country
<这似乎是一个输入错误,并且没有显示它的定义位置(as)。['user\u id']
<其中的空格计为一个字符,您还应该得到一个关于它的未定义索引警告。不建议像这样在其中存储数据,使用逗号分隔的值。有很多方法可以使数据库正常化。你错过了一些东西。看我在他们的问题下留下的评论,关于未定义索引;-)@FunkFortyNiner可能会有更多的错误;我不是在评估PHP代码,而是建议修复MySQL查询,因为您遗漏了一些东西。看我在他们的问题下留下的评论,关于未定义索引;-)@FunkFortyNiner可能会有更多的错误;我不是在评估PHP代码,而是建议对MySQL查询进行修复