2012-02-15 89 views
1

我在我的mysql表中有一个param字段什么是包含json数据。 编码后看起来是这样的:关于json数据的mysql查询

'config.enable_comments' => string '1' 
    'metadata.description' => string '' 
    'metadata.keywords' => string '' 
    'metadata.robots' => string '' 
    'metadata.author' => string '' 
    'config.primary_category' => string '157' 

我怎样才能使一个MySQL查询例如取决于config.primary_category。

SELECT params 
FROM #__zoo_item 
WHERE config.primary_category = ". $id; 
+4

那一个坏主意将它存储为json。你真的应该规范你的数据库。 – 2012-02-15 14:05:23

+0

如果把它改为适当的标准化方案还为时不晚,你绝对应该改变它。这将导致你很多很多头痛... – 2012-02-15 14:07:15

+0

事情是,这是一个joomla组件(购买)什么是存储一些PARAMS为JSON,我想触发一些项目,其中config.primary.category与id等效。我不是一个专业人士,也许我做错了什么。 – lgt 2012-02-15 14:11:49

回答

2

一年多之后...我需要做一个这样的查询项目,其中的数据库无法归因于某种原因。

这是一个可能的解决方案:

SELECT * 
FROM myTable 
WHERE if(
    instr(myField,'myJsonField'), 
    substring(
    substring(myField,instr(myField,'myJsonField')+15), 
    1, 
    instr(substring(myField,instr(myField,'myJsonField')+15),'\",\"')-1 
), 
    '' 
) = 'theJsonValue' 

请注意,“myJsonField”具有11的长度,从而增加该JSON格式的分离的码元是15