2013-04-09 24 views
0

值存储在COMPANY_ID像如何申请WHERE子句重新排列或jscon编码值

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

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

select * from tbl where company_id = 2 

这是我需要执行的。

欲了解更多信息,JSON格式是动态的结果(通过数据库中的值填写)在Zend2选择列表。

如果是数组而不是json,那么这个简单的select查询可以如何执行。

+1

你试过了吗?像'2%'这样的company_id和'%2'一样的company_id(用于确保你不会得到22)看一些其他的例子http://www.techonthenet.com/sql/like.php – 2013-04-09 14:31:52

+0

非关系存储像这需要一些黑客...可以做'WHERE company_id LIKE'%“2”%''。 – phpisuber01 2013-04-09 14:33:30

+0

你真的应该考虑数据库的规范化。从长远来看,这非常容易。 – bestprogrammerintheworld 2013-04-09 14:42:09

回答

1

由于每个ID是双引号里面一个数字,你可以只用一个LIKE语句查询:

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

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

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

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

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); 

但是,这个问题的出现是因为表不正确标准化。当应用程序达到大规模时,添加参考表并查询此参考表将是更好的选择。