我将数据插入到json_encoded
的数据库中。现在我想搜索"功能",但我不能。
MySQL查询:
SELECT `id` , `attribs_json`
FROM `products`
WHERE `attribs_json` REGEXP '"1":{"value":[^"3"$]'
此查询显示所有带有键" 1"的行。价值是任何不值的东西都是" 3"
我的数据是:
{"feature":{"1":{"value":"["2","3"]"},
"2":{"value":["1"]},
"5":{"value":""},
"3":{"value":["1"]},
"9":{"value":""},
"4":{"value":"\u0633\u0627\u062a\u0646"},
"6":{"value":""},
"7":{"value":""},
"8":{"value":""}
},
"show_counter":"0",
"show_counter_discount":""
}}
答案 0 :(得分:66)
如果你有 MySQL版本> = 5.7 ,那么你可以试试这个:
onsubmit
输出:
$('input[type="submit"]').click(function(e){
//validate form
var condition = validateForm(); //return true or false
if(condition){
alert('Form OK!');
}
//stop submission
else{
alert('Please check and input correct fields!');
e.preventDefault();
return false;
}
});
有关详细信息,请查看MySQL参考手册:
https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
答案 1 :(得分:11)
在数据库中存储JSON违反了第一个普通表单。
您可以做的最好的事情是将功能标准化并存储在另一个表中。然后,您将能够使用连接更好看和执行查询。 您的JSON甚至类似于表格。
Mysql 5.7具有内置的JSON功能:
http://mysqlserverteam.com/mysql-5-7-lab-release-json-functions-part-2-querying-json-data/
正确的模式是:
WHERE `attribs_json` REGEXP '"1":{"value":[^}]*"3"[^}]*}'
[^}]
将匹配除}
答案 2 :(得分:10)
如果您使用的是MySQL最新版本可能有助于满足您的要求。
select * from products where attribs_json->"$.feature.value[*]" in (1,3)
答案 3 :(得分:6)
我使用此查询
SELECT id FROM table_name WHERE field_name REGEXP '"key_name":"([^"])key_word([^"])"';
or
SELECT id FROM table_name WHERE field_name RLIKE '"key_name":"[[:<:]]key_word[[:>:]]"';
我用它来搜索部分值的第一个查询。第二个查询我用它来搜索确切的单词。
答案 4 :(得分:2)
喜欢就好。
SELECT * FROM `products`
WHERE JSON_UNQUOTE(JSON_EXTRACT(`attribs_json`, '$.value')) LIKE '%X%'
答案 5 :(得分:1)
对于Mysql8->
查询:
SELECT properties, properties->"$.price" FROM book where isbn='978-9730228236' and JSON_EXTRACT(properties, "$.price") > 400;
数据:
mysql> select * from book\G;
*************************** 1. row ***************************
id: 1
isbn: 978-9730228236
properties: {"price": 44.99, "title": "High-Performance Java Persistence", "author": "Vlad Mihalcea", "publisher": "Amazon"}
1 row in set (0.00 sec)
答案 6 :(得分:1)
如果 MySQL 版本 <5.7
SELECT fields
FROM table
WHERE field_json LIKE '%"key":"70"%';
// 70 = 值
答案 7 :(得分:-1)
对于MySQL全部(和5.7)
SELECT LOWER(TRIM(BOTH 0x22 FROM TRIM(BOTH 0x20 FROM SUBSTRING(SUBSTRING(json_filed,LOCATE('\"ArrayItem\"',json_filed)+LENGTH('\"ArrayItem\"'),LOCATE(0x2C,SUBSTRING(json_filed,LOCATE('\"ArrayItem\"',json_filed)+LENGTH('\"ArrayItem\"')+1,LENGTH(json_filed)))),LOCATE(0x22,SUBSTRING(json_filed,LOCATE('\"ArrayItem\"',json_filed)+LENGTH('\"ArrayItem\"'),LOCATE(0x2C,SUBSTRING(json_filed,LOCATE('\"ArrayItem\"',json_filed)+LENGTH('\"ArrayItem\"')+1,LENGTH(json_filed))))),LENGTH(json_filed))))) AS result FROM `table`;
答案 8 :(得分:-1)
我认为...
搜索部分值:
SELECT id FROM table_name WHERE field_name REGEXP '"key_name":"([^"])*key_word([^"])*"';
搜索准确的单词:
SELECT id FROM table_name WHERE field_name RLIKE '"key_name":"[[:<:]]key_word[[:>:]]"';