Mysql查询WHERE列在json数组中

时间:2014-12-12 17:25:22

标签: php mysql sql json

我已经设置了一个查询,它可以选择多个内容。

$stm = $db->query('SELECT startUser, forUser, percentage, time, taskTitle, taskDesc, color FROM admin_task WHERE forUser = "'.$queryanswer.'")');

但是对于DB中的用户来说是这样的:

["demo","   user"]

如何检查forUser(上面的json数组)是否有demo?我甚至可以检查一下吗?

3 个答案:

答案 0 :(得分:9)

我认为你只能在Mysql 5.7中实现这一点。

在5.7版中,您可以执行以下操作:

SELECT JSON_EXTRACT(json_field, '$.name');

并且它将仅从json对象中提取名称密钥

使用' JavaScript'搜索所有项目标签

SELECT * FROM `table` WHERE JSON_CONTAINS(json_field, '["JavaScript"]');

查找包含标记的所有项目' Java'

SELECT * FROM `table` WHERE JSON_SEARCH(json_field, 'one', 'Java%') IS NOT NULL;

使用'一个'找到第一场比赛或“全部”比赛找到所有比赛

您可以使用JSON路径提取Twitter昵称:

SELECT name, json_field->"$.twitter" AS `twitter` FROM `user`;

您还可以在WHERE子句中引用JSON路径,仅返回具有Twitter帐户的用户:

SELECT name, profile->"$.twitter" AS `twitter` FROM `user` WHERE profile->"$.twitter" IS NOT NULL;

你可以做更多的事情:

  • 创建JSON值

  • JSON值的规范化,合并和自动包装

  • 搜索和修改JSON值

  • JSON值的比较和排序

  • JSON值的聚合

有关详细信息,请参阅:https://dev.mysql.com/doc/refman/5.7/en/json.html

答案 1 :(得分:2)

如果它确实是JSON字段,则在5.7中可以执行以下操作:

ls -a /home/shirley/ <-- file is in here
rm /home/shirley/.angular.json <-- remove it

答案 2 :(得分:1)

SELECT startUser, 
forUser, 
percentage, 
time, 
taskTitle, 
taskDesc, 
color 
FROM admin_task WHERE JSON_SEARCH(forUser -> '$[*]', 'one', 'demo');