在数组类型字段Doctrine和Mysql中查找

时间:2018-01-14 00:04:10

标签: mysql arrays symfony doctrine

我创建了一个字段"数组"在mysql DB上,遵循此响应:Link

当持久存储数据时:

db table record

{i:0;s:4:"3410";i:1;s:4:"3415";i:2;s:4:"3459";i:3;s:4:"3460";i:4;s:4:"3492";}

但是在sql查询中找不到,我尝试了一些东西,但我仍然无法得到它

SELECT  *
FROM classified_zones cz
WHERE cz.locations_ids IN ( 3492 )

3 个答案:

答案 0 :(得分:3)

您可以动态构建类似于以下内容的学说查询:

$qb->select('cz')
   ->from('myBundle:ClassifiedZones', 'cz')
   ->where('cz.locationsIds LIKE :id')
   ->setParameter('id', '%:'.strlen($id).':"' . $id . '"%' );

最终的sql查询应该类似于Łukasz的回复。

答案 1 :(得分:1)

以下查询应该有效:

SELECT *
FROM classified_zones cz
WHERE cz.locations_ids LIKE '%s:4:"3492";%'

答案 2 :(得分:1)

不要使用“不熟悉的格式”,MySQL支持本机JSON数据类型。

请参阅:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains

例如:

locations_ids =“[1,2,3,3492]”

SELECT cz.* FROM classified_zones cz WHERE JSON_CONTAINS(cz.locations_ids, 3492)