如何再次应用WHERE子句数组或json编码的值

时间:2013-04-09 14:29:07

标签: php mysql json zend-framework2

值存储在company_id下,如

["2"]
["2", "1"]

其中2和1是公司的ID。现在我想要ID 2的所有结果。我怎样才能再次查询json编码数据。

select * from tbl where company_id = 2

这是我需要执行的。

有关更多信息,json格式是动态的结果(由数据库值填充)在Zend2中选择List。

如果它是数组而不是json,如何执行这个简单的选择查询。

2 个答案:

答案 0 :(得分:1)

MySQL有一种名为SET的数据类型您可以在此任务上使用此数据类型。这将允许您输入逗号分隔值,并且仍然可以按单个项目进行查询。

手动:http://dev.mysql.com/doc/refman/5.0/en/set.html

您的查询必须更新为以下内容:

SELECT * FROM tbl_name WHERE FIND_IN_SET('2', company_id);

但是,出现这个问题是因为表格没有正确规范化。当应用程序达到大规模时,添加引用表并查询此引用表将是一个更好的选择。

答案 1 :(得分:1)

由于每个ID都是双引号内的数字,您只需使用LIKE语句进行查询:

select * from tbl where company_id LIKE '%"2"%'
  

如果它是数组而不是json,如何执行这个简单的选择查询。

您可以将JSON存储到mysql数据库中,因为它是一个字符串。但是数组不是字符串,因此您无法将其存储在那里。你需要序列化它,但为此你应该更喜欢JSON。

另一种方法是创建一个存储公司关系的表。