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 martinazzo
      não consigo apagar, então deixei assim... se alguém conseguir por favor
    • Por kelvinferraz
      Boa tarde pessoal,
       
      Estou com uma dúvida e dificuldade para realizar algo que talvez seja simples para muitos, eu gostaria de gerar uma tabela numerada de 1...X porém somente quando o usuario selecionar um checkbox ele irá assumir um número, por exemplo

       
      <tr> <td class="border border-dark"> numeracao_automatica </td> <td class="border border-dark"> '. $opcaovindadocheckbox .' </td> </tr> Caso o usuario nao selecione nenhuma checkbox ele não irá atribuir nenhum número, outra coisa é se ele selecionar aleatoriamente uma lista do chekbox, ele ir numerando conforme a seleção
       
      Se alguém tiver alguma ideia ou maneira simples ou dificil de resolver ficarei extremamente grato.
       
      Obrigado a todos!
    • Por Etherning
      Olá,quando eu digito meu codigo do dump.. acaba dando este erro
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      2 errors were found during analysis.
       
      Unexpected beginning of statement. (near "`post_id`" at position 670) Unrecognized statement type. (near "INT" at position 680) #1064 - Você tem um erro de sintaxe no seu SQL próximo a 'CREATE TABLE post (
      `post_id` INT    COMMENT "Id do post postado"' na linha 14 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      código:
      -- tabela de cadastro / login CREATE TABLE users ( user_id INT COMMENT "Id", user_name VARCHAR(100) NOT NULL COMMENT "Usuario / Login / Recuperação", user_mail VARCHAR(50) NOT NULL COMMENT "Email.", user_pass VARCHAR(32) NOT NULL COMMENT "Senha / Login / Recuperação", user_photo VARCHAR(70) COMMENT "O caminho da foto", user_bio VARCHAR(140) COMMENT "Biografia da pessoa", user_bday DATE COMMENT "Data de nascimento", user_date DATE COMMENT "Dia que foi criado", user_logi DATE COMMENT "Dia que efetuou login", PRIMARY KEY (user_id) ) -- post-it CREATE TABLE post ( post_id INT COMMENT "Id do post postado", post_user INT COMMENT "Usuario que postou", post_cont VARCHAR(140) COMMENT "Conteudo(Content) da postagem", post_media VARCHAR(70) COMMENT "Fotos, videos, gifs, etc. colocado pelo usuario", post_type VARCHAR(70) COMMENT "Tipo de midia", post_comm INT COMMENT "Comentário do post referencia do post_id", post_retw INT COMMENT "Resposta(retweet) do comentario / (pai comentario == post_comm)", post_date DATE COMMENT "Data e hora de envio", PRIMARY KEY (post_id) ) -- seguidores CREATE TABLE followers ( foll_user INT COMMENT "Usuario", foll_foll INT COMMENT "Seguidor", foll_date DATETIME COMMENT "Data e hora que começou a seguir", PRIMARY KEY (foll_user , foll_foll) ) -- like CREATE TABLE like ( like_post INT COMMENT "Post que recebeu o like", like_user INT COMMENT "Oessoa que deu like", like_date DATETIME COMMENT "Data e hora do like", PRIMARY KEY (like_post , like_user) ) -- notifications CREATE TABLE notifications ( noti_id INT COMMENT "Id das notificações", noti_usua INT COMMENT "Usuário", noti_post INT COMMENT "Post do usuário", noti_view BOOLEAN COMMENT "Se a notificação já foi vista", noti_data DATETIME COMMENT "Data e hora da notificação / Marcação se ja foi lida ou não", PRIMARY KEY (noti_id) )  
    • Por rogfranz
      Olá pessoal! Então, estou desenvolvendo um projeto que pode tomar grandes proporções, e estou com uma dúvida que está me tirando o sono!

      Digamos que trata-se de um sistema de pedidos só pra usar como exemplo.

      Vários usuários vão poder se cadastrar no sistema e criar seus pedidos.

      Teremos então as tabelas

      usuarios
      pedidos
      pedido_itens
       
       
      minha dúvida está na seguinte questão.
      Uso bancos de dados separados para cada cliente ?  
      ou
      Uma tabela por exemplo dos pedidos vinculo o id do usuário para todos usuários do sistema ?

      POR FAVOR! Me Deem a opinião do que vocês fariam! e Por que!

      Trazendo para a realidade do meu projeto uma estimativa de volume de dados que eu imagino.
      Levando em conta que um usuário pode cadastrar a média de 10 "pedidos" no mês com aproximadamente 500 ítens

      Agradeço muito a contribuição de vocês!
    • Por LuanMartinsTI
      Tenho o seguinte problema, eu preciso dar um select em duas tabelas, ou ter dois selects tanto faz, eu fiz com inner join e com union all mas nao consigo ter o resultado que eu desejo
      O problema é o seguinte> Pra saber quantos usuarios eu tenho em cada grupo eu preciso dar um select na membros grupo com o id do grupo, mas eu preciso mostrar apenas os 5 primeiros grupos com mais gente, eu nao tenho na tabela falando grupo 1 tem 50 membros, eu tenho 50 linhas com grupo 1 e id do usuario, como eu transformo isso no que eu quero? a unica forma q eu pensei é criar um campo novo em grupos e colocar la o resultado de rowCount, mas gostaria de saber se é possivel fazer sem, eu ja consigo mostrar quantos usuarios cada grupo tem, eu nao consigo mostrar é em ordem e nao é so dar o asc o problema é na logica provavelmente, mas se for possivel resolver isso com uma unica query ficarei grato
      tabela 1
      grupos( id nome dono created stat ) tabela 2
      membros_grupo( id grupo_id user_id )  
      PHP
      public function ultimosGrupos($limite){ try { $query = "SELECT * FROM groups ORDER BY id ASC LIMIT :limite"; $this->Select = $this->Conn->prepare($query); $this->Select->bindParam(':limite' , $limite, PDO::PARAM_INT); $this->Select->execute(); if($this->Select->rowCount() > 0){ return $this->Select->fetchAll(PDO::FETCH_ASSOC); }else{ return FALSE; } } catch (PDOException $exc) { exibeMensagens("Erro ao consultar. {$exc->getMessage()}", WS_ERROR); } } public function users_por_grupo($id){ try { $query = "SELECT * FROM group_memberships WHERE group_id = :id"; $this->Select = $this->Conn->prepare($query); $this->Select->bindParam(':id' , $id, PDO::PARAM_INT); $this->Select->execute(); return $this->Select->rowCount(); } catch (PDOException $exc) { exibeMensagens("Erro ao consultar. {$exc->getMessage()}", WS_ERROR); } }  
×

Informação importante

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