选择在where中过滤的JSON的一部分

时间:2017-10-26 02:19:03

标签: mysql sql json database collections

在数据库中我有一个名为resources的字段,其中我保留了用户的权限,格式为Json:

[  
 {  
    "rota":"reserva",
    "sref":"oQueFazer",
    "ordem":"1",
    "recursos":[  
       "index",
       "show",
       "store",
       "update"
    ],
    "descricao":"Reservar",
    "controller":"ReservasController"
 },
 {  
    "rota":"reserva",
    "sref":"oQueFazer",
    "ordem":"2",
    "recursos":[  
       "index",
       "show"
    ],
    "descricao":"Reservas",
    "controller":"ReservasController"
 },
 {  
    "rota":"usuario",
    "sref":"oQueFazer",
    "ordem":"3",
    "recursos":[  
       "index",
       "show"
    ],
    "descricao":"Usuários",
    "controller":"UsuariosController"
 },
 {  
    "rota":"feriado",
    "sref":"home.feriado",
    "ordem":"4",
    "recursos":[  
       "index",
       "show",
       "store",
       "update",
       "destroy"
    ],
    "descricao":"Feriados",
    "controller":"FeriadosController"
 },
 {  
    "rota":"sala",
    "sref":"home.sala",
    "ordem":"5",
    "recursos":[  
       "index",
       "show"
    ],
    "descricao":"Salas",
    "controller":"SalasController"
 }
]

当我将查询运行到下面时,它会让我正确地返回哪个用户拥有权限:

SELECT recursos from perfis
WHERE
 JSON_CONTAINS(recursos, '{"controller": "FeriadosController"}');

几乎在那里,通过上面的选择,我得到了我正在寻找的记录行,问题是它向我显示了资源字段中的整个json集合。 (当然他会这样做,这就是我要求的)。

因此,为了给我带来某个控制器中用户所允许的权限,我在下面做了选择:

SELECT JSON_EXTRACT(recursos, '$[0].recursos') permite from perfis
WHERE
 JSON_CONTAINS(recursos, '{"controller": "FeriadosController"}');

回报是:

["index", "show", "store", "update"]

也就是说,一切正常,它显示了用户对给定控制器的权限,问题是它显示了第一行'$[0].recursos'的JSON集合的权限,但这不是我的意思我想,我想回来:

["index", "show", "store", "update", "destroy"]

用户对控制器HolidaysController

的权限是多少

也就是说,我能够扫描控制器以在json中搜索,但是我无法显示被搜索的json部分,有人有解决方案,jpa经历了这个吗?

1 个答案:

答案 0 :(得分:0)

一种选择是使用以下查询(根据需要调整):

<form (keyup.enter)="setTime()"><input type="number" [(ngModel)]="selectedTime"  name="time" placeholder="enter mins" ngModel/></form>

请参阅db-fiddle