mySQL JSON:搜索列表

时间:2017-07-18 10:02:00

标签: mysql json

我有一个JSONmanifest,其中包含一系列对象。 我需要返回所有表行,其中数组中的任何对象都有一个slide_id存在于子选择中。

JSON字段的结构是..

{ matrix:[
     {
        row:1,
        col:1,
        slide_id:1
     },
     {
        row:1,
        col:2,
        slide_id:5
     }
  ]
}

所以我想运行这样的东西......

SELECT id FROM presentation WHERE manifest->'$.matrix[*].slide_id' IN ( (SELECT id from slides WHERE date_deleted IS NOT NULL) );

但是这并不起作用,因为manifest->'$.matrix[*].slide_id'为每一行返回一个JSON数组。

我设法让这个工作,但它扫描整个表格时速度惊人......

SELECT 
    p.id
FROM 
    (
     SELECT id, 
     manifest->'$.matrix[*].slide_id' as slide_ids 
     FROM `presentation`
    ) p
INNER JOIN `pp_slides` s 
ON JSON_CONTAINS(p.slide_ids, CAST(s.id as json), '$')    
WHERE s.date_deleted IS NOT NULL

如果我将其过滤到单独的演示文稿ID,那么它也不会太糟糕,但对于包含几百张幻灯片的演示文稿仍然需要700毫秒。有更清洁的方法吗?

我想最好的方法是重构它以将矩阵存储为关系表....

0 个答案:

没有答案