Mysql query WHERE Json value = this


Mysql query WHERE Json value = this

我需要在xml字段内编写mysql查询。Joomla为我提供了这种格式,它对大多数事情来说相对简单。除了我可以实际编写一个查询,检查属性列中的json值。

下面只是我的例子,我知道它不会工作。但这就是我想做的。

SELECT * 
FROM com_content 
WHERE atrribs(form_show) = 1

下面还有属性列所保存的json格式

{
"form_show":"1",
"form_avilable":"0",
"mycategory":"4",
"response":"Thank you!",
"forms":{
"fieldinstruction":["blah","blah"],
"fieldmanditory":["0","0"]
}
}

注意:这是joomla解释的格式。摘自joomla docs

docs.joomla.org/SQL_form_field_type

<field 
    name="myfield" 
    type="sql" 
    default="10" 
    label="Select an article" 
    query="SELECT id, title FROM #__content" 
    key_field="id" 
    value_field="title" 
/>

还可以在SQL语句中组装或计算字段。例如,假设您希望将每篇文章的创建日期/时间附加到列表中的文章标题。然后可以使用以下SQL语句:

SELECT id, concat( title, ' (', created, ')') AS title 
FROM #__content

我需要做的是使用上述格式写一个mysql查询,但它需要从一列内获得一个值,它也是一个json。

提前感谢大家

不能,这正是在DB中存储JSON字符串应该谨慎处理的原因。也就是说,您使用的示例列都不是以JSON格式存储在Joomla的内容表中。这些值是你想要的吗?

您唯一的选择是在PHP中解析返回的结果集以执行任何进一步的过滤。根据您的最终目标,您可能能够将PHP逻辑插入到MVC路径模型或表类中以处理任何过滤。您是在编写自定义组件还是实现布局覆盖?

您可以尝试查询

$mystring = '%'.'"form_show":"1"' . '%';
$query->where($db->quoteName('attrib')   .' LIKE '. $db->quote($mystring) );

(固定)