Mysql查询WHERE Json value = this

时间:2014-03-18 00:14:57

标签: php mysql json joomla

我需要在xml字段中编写一个mysql查询。 Joomla为我提供了格式,并且对大多数事情都相对简单。除了我可以实际编写一个检查attribs列中的json值的查询。

以下是我的例子,我知道它不会起作用。但这就是我想要做的事情。

SELECT * 
FROM com_content 
WHERE atrribs(form_show) = 1

下面是attribs列持有的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。

提前感谢任何人

2 个答案:

答案 0 :(得分:1)

你不能,这正是在数据库中存储JSON字符串的原因应该谨慎对待。话虽如此,您使用的示例列都没有存储在Joomla内容表的JSON中。那些是你想要的实际价值吗?

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

答案 1 :(得分:0)

您可以尝试查询

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

(修正了这个)