问题描述
我有一个包含 longtext
类型列的表,该列以 JSON 格式存储营养值。以下是数据外观的示例:
[{"label":"N","value":0.1,"percent":10},{"label":"P",{"label":"K",{"label":"S","value":"","percent":""},{"label":"Ca",{"label":"Mg",{"label":"Zn",{"label":"Mn",{"label":"Cu",{"label":"B",{"label":"Al",{"label":"Fe",{"label":"Na",{"label":"Mo","percent":""}]
目前我正在从 Db 中提取所有记录,然后使用 foreach
遍历每条记录并过滤掉那些没有 N、P 和 K 且具有非零/空字符串百分比的记录价值。
foreach($record as $rec){
$nutrients = json_decode($rec->nutrients);
$nutrientTextArray = [];
foreach($nutrients as $n){
if(in_array($n->label,['N','P','K'])){
if($n->percent != ''){
$nutrientTextArray[] = $n->percent;
} else {
$nutrientTextArray[] = 0;
}
} else {
if($n->percent != ''){
$nutrientTextArray[] = $n->percent . $n->label;
}
}
}
但是,遍历每条记录的所有营养素需要很长时间。我尝试在 SQL 查询本身中进行通配符匹配以进行过滤,执行如下操作,
select * from products where nutrients like '%"label":"N"%"label":"P"%"label":"K"%';
但这并没有考虑到非零/空百分比方面。
如何修改此查询以仅选择具有标签 N、P 和 K 的记录,其中每种营养素都具有非零/空字符串百分比值?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)