Ir para conteúdo
Maykel-ctba

JSON_EXTRACT referenciando um ID para infos de outra tabela

Recommended Posts

Eu tenho uma tabela no BD chamada "menu", com uma coluna chamada ESTRUTURA. Ela era do tipo text, e nela contém um JSON com uma estrutura de menus referenciadas por IDs de outra tabela "categoria".

 

Ex: [{"id": 1}, {"id": 3}, {"id": 4}, {"id": 131}, {"id": 125}, {"id": 5}]

 

Estes IDs acima são categorias cadastradas na tabela "categoria". Porém, para retornar no PHP, tem sido bem custoso para a performance, fazer um loop, dentro desse loop fazer um SELECT * FROM categoria WHERE id = 1, = 2, e por aí vai...

 

Li que existe um novo tipo de coluna chamada JSON, que poderia referenciar informações na hora da consulta. Corrijam-me se estiver errado.

 

Mas é possível, por exemplo, fazer uma consulta desta tabela "menu", e nela, retornar as infos de cada ID deste JSON, em uma consulta apenas?

 

Exemplo do que gostaria (Não sei a sintaxe, não sei onde referenciar a tabela "categoria")

 

SELECT *, JSON_EXTRACT(menEstrutura, '$.*') as Data FROM sistema_menu WHERE menId = 1


Resultado:

Citar

ID         |       Title         |       Structure         |       Data
1         |       Menu Header         |       [{"id": 1}, {"id": 3}]         |        [{"1":{"id":1,"title":"Cat 01","active":"true"},"2":{"id":2,"title":"Cat 02","active":"true"}}]

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por GustavoJacob15
      tenho um case assim no meu fonte: 
      ---------------------------------------------------------
      CASE RA_DEMISSA
          WHEN '' THEN 'DESLIGADO'
          ELSE 'ATIVO'
      END AS SITUACAO
      ---------------------------------------------------------
       
      Preciso colocar no where para mostar um parametro com 'ativo' ou 'desligado' 
       
    • Por JOSELUISALD
      Bom dia. Em minha aplicação o cliente quer uma cópia de seu sistema localmente e remoto (hospedado). Tem como eu fazer a sincronização dos bancos de dados, para que tudo que seja feito localmente seja inserido automaticamente no banco remoto? Desde já obrigado.
    • Por Caio_Lourençon
      Olá estou desenvolvendo um projeto utilizando a extensão MySQLi, e nisso aproveitando para utilizar algumas funções orientada a objeto! Gostaria de tirar umas dúvidas em relação a listagem de dados, são duas perguntas:   1) Utilizar a função foreach() ao invés de um while() com a função fetch_array() dentro, tem uma listagem mais rápida ou mais lenta? Pois com ambas consigo trazer os dados, No momento estou utilizando a foreach por ser mais rápida de se digitar.
      2) Utilizo muitas listagens de tabelas diferentes na mesma página sempre chamando um novo SELECT, seria melhor criar uma função com um SELECT dentro para eu sempre reutiliza-lá ou não iria mudar muita coisa em questão de desempenho?
       
      Agradeço qualquer informação.
    • Por gersonab
      Procuro uma revenda de hospedagem confiável, ja adianto que uolhost e locaweb estão fora dos planos.
    • Por ZeroCood
      Senhores bom dia, preciso pegar um retorno de uma api da procob ele retorna um json, nao estou conseguindo pegar o retorno, alguem pode me ajudar, veja o codigo: 
      { "code": "000", "message": "Consulta de testes com dados fictícios", "date": "2019-03-19", "hour": "10:07:41", "content": { "nome": { "existe_informacao": "SIM", "conteudo": { "documento": "99999999999", "tipo_documento": "PF", "nome": "JOÃO DA SILVA", "outras_grafias": [ "JOÃO D SILVA", "JOÃO SILVA" ], "data_nascimento": "15/06/1979", "outras_datas_nascimento": [ "25/06/1979" ], "idade": "26", "signo": "Gêmeos", "obito": "NAO", "sexo": "M", "uf": "RS,CE,", "situacao_receita": "REGULAR", "situacao_receita_data": "2016-10-17", "situacao_receita_hora": "11:02:49", "estrangeiro": { "existe_informacao": "SIM", "estrangeiro": "NAO", "pais_origem": { "codigo": "10", "origem": "Brasileiro" } } } }, "dados_parentes": { "existe_informacao": "SIM", "conteudo": [ { "documento": "88888888888", "nome": "MARIA DA SILVA", "campo": "mae", "obito": "NAO", "tipo_beneficio": "", "aposentado": "NAO" } ] }, "pessoas_contato": { "existe_informacao": "SIM", "conteudo": [ { "documento": "77777777777", "nome": "LUIZ SOUZA", "endereco": "SAO CLEMENTE", "bairro": "CENTRO", "cep": "44642000", "cidade": "VARJOTA", "uf": "CE" } ] }, "pesquisa_enderecos": { "existe_informacao": "SIM", "conteudo": [ { "logradouro": "RUA", "endereco": "SAO CLEMENTE", "bairro": "CENTRO", "cidade": "VARJOTA", "numero": "13", "cep": "44642000", "bloco": "", "apto": "", "casa": "", "quadra": "", "lote": "", "complemento": "", "uf": "CE" } ] }, "trabalha_trabalhou": { "existe_informacao": "SIM", "conteudo": [ { "documento": "92787126000176", "nome": "PADARIA PETER PÃO", "logradouro": "RUA", "endereco": "INÁCIO DA SILVA", "bairro": "CENTRO", "cidade": "CURITIBA", "numero": "999", "cep": "87878787", "bloco": "", "apartamento": "", "casa": "", "quadra": "", "lote": "", "complemento": "", "uf": "PR", "telefones": [ { "ddd": "99", "telefone": "99999999", "tipo": "fixo" } ] } ] }, "contato_preferencial": { "existe_informacao": "SIM", "conteudo": { "telefone_fixo": { "ddd": "99", "telefone": "99999999" }, "telefone_celular": { "ddd": "99", "telefone": "99999999" }, "telefone_outros": { "ddd": "41", "telefone": "33333333" }, "parentes": { "documento": "99999999999", "nome": "MATHEUS ALENCAR", "tipo": "pai" }, "contatos": { "documento": "99999999999", "nome": "MARIA ROBERTA PEREIRA" }, "empregador": { "documento": "99999999999", "nome": "JOAO NASCIMENTO SANTOS" }, "email": "email@email.com", "endereco": { "endereco": "FRANCISCO JOSE", "numero": "42", "cidade": "Curitiba", "estado": "PR", "cep": "99999999" } } }, "residentes_mesmo_domicilio": { "existe_informacao": "SIM", "conteudo": [ { "nome": "CARLA TEIXEIRA", "documento": "99999999999" }, { "nome": "LUIZ PEREIRA", "documento": "99999999999" } ] }, "emails": { "existe_informacao": "SIM", "conteudo": [ { "email": "joao@email.com", "pontuacao": "0" }, { "email": "joao.fernando@email2.com", "pontuacao": "0" } ] }, "numero_beneficio": { "existe_informacao": "SIM", "conteudo": { "numero": "999999999", "ano_aposentadoria": "7", "tipo_aposentadoria": "Aposentadoria Por Tempo De Contribuição", "aposentado": "SIM", "inss": "SIM", "acidente_trabalho": "SIM", "afastado_doenca": "SIM", "emprestimo": "SIM", "banco_nome": "Itaú Unibanco S.A.", "banco_agencia": "DUQUE DE CAXIAS/JARDIM PRIMAVERA", "banco_endereco": "ROD. WASHINGTON LUIZ, S/Nº", "banco_numero": "0", "banco_complemento": "QUADRA 3 - LOTE 5", "banco_bairro": "PARQUE SANTA LÚCIA", "banco_c_e_p": "99999999", "banco_cidade": "DUQUE DE CAXIAS", "banco_estado": "RJ" } }, "alerta_participacoes": { "existe_informacao": "SIM", "conteudo": { "existe": "SIM", "quantidade": 3 } }, "pesquisa_telefones": { "existe_informacao": "SIM", "conteudo": { "fixo": [ { "ddd": "51", "telefone": "11111111", "operadora": "Embratel - Fixo", "pontuacao": "0" } ], "celular": [ { "ddd": "41", "telefone": "22222222", "operadora": "TIM - Celular", "pontuacao": "0" } ], "outros": [ { "ddd": "41", "telefone": "33333333", "operadora": "OI - Fixo", "pontuacao": "0" } ], "comercial": [ { "ddd": "51", "telefone": "66666666", "operadora": "Embratel - Fixo", "pontuacao": "0" } ] } }, "outros_documentos": { "existe_informacao": "NAO" } } }  
      como faço para pegar esse json e mostrar cada um exe: comercial: -- , outros documentos: --
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.