Ir ao conteúdo
  • Cadastre-se
Irwing Seiji Ato

PHP Como faço para mostrar o nome da categoria da tabela tb_categoria

Posts recomendados

Escrevi este código porém gostaria de mostrar o nome da empresa e nome da categoria no consultar movimento, o código anterior que fiz só mostrava o id_empresa, id_categoria gostaria que mostrasse o nome da empresa e o nome da categoria, em outra tabela tem o nome porém como faço isso?

segue o código

<?php

require_once 'Conexao.php';
require_once 'UtilDAO.php';

class MovimentoDAO extends Conexao {

    public function CadastrarMovimento(MovimentoVO $vou) {
        if ($vou->getMovimento() || $vou->getData() == '' || $vou->getIdCategoria() == '' || $vou->getIdEmpresa() == '' || $vou->getValor() == '') {
            return 0;
        }
        
        //1 PASSO: Criar um obj que receberá o obj de conexão
        $conexao = parent::retornaConexao();

        //2 PASSO: Criar uma variável que receberá o comando SQL que deverá ser executado
        $comando = 'insert into tb_movimento (tipo_movimento, data_movimento, valor_movimento, obs_movimento, id_usuario, id_categoria, id_empresa value(?,?,?,?,?,?,?)';

        //3 PASSO: Criar um objeto que será configurado para ser executado NO MYSQL
        $sql = new PDOStatement();

        //4 PASSO: O objeto configurado SQL receberá a conexão que vai estar preparada para o comando
        $sql = $conexao->prepare($comando);

        //5 PASSO: Verifica se tem no $comando pontos de interrogação. Se tiver configura o bindValue
        $sql->bindValue(1, $vou->getMovimento());
        $sql->bindValue(2, $vou->getData());
        $sql->bindValue(3, $vou->getValor());
        $sql->bindValue(4, $vou->getObs());
        $sql->bindValue(5, UtilDAO::CodigoLogado());
        $sql->bindValue(6, $vou->getIdCategoria());
        $sql->bindValue(7, $vou->getIdEmpresa());
        try {
            $sql->execute();
            return 1;
        } catch (Exception $ex) {
            echo $ex->getMessage();
            return -1;
        }
    }
    public function AlterarMovimento(MovimentoVO $vou) {
        if ($vou->getMovimento() || $vou->getData() == '' || $vou->getIdCategoria() == '' || $vou->getIdEmpresa() == '' || $vou->getValor() == '') {
            return 0;
        }
    }

    public function ConsultarMovimento() {
        $conexao = parent::retornaConexao();

        $comando = 'select id_movimento, tipo_movimento, data_movimento, valor_movimento, obs_movimento, id_categoria, id_empresa from tb_movimento where id_usuario = ?';

        $sql = new PDOStatement();
        $sql = $conexao->prepare($comando);

        $sql->bindValue(1, UtilDAO::CodigoLogado());

        //Elimina o índice do array
        $sql->setFetchMode(PDO::FETCH_ASSOC);

        $sql->execute();

        return $sql->fetchAll();
    }

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Irwing Seiji Ato Você pode fazer uma consulta em duas ou trés tabelas usando a mesma solicitação.

 

Um exemplo:

SELECT `tb_movimento`.`id_movimento`, `tb_movimento`.`tipo_movimento`, `tb_movimento`.`data_movimento`, `tb_movimento`.`valor_movimento`, `tb_movimento`.`obs_movimento`, `tb_movimento`.`id_categoria`, `tb_movimento`.`id_empresa`, `tb_empresa`.`nome`, `tb_categoria`.`nome` FROM `tb_movimento`, `tb_empresa`, `tb_categoria` WHERE `tb_movimento`.`id_usuario` = ? AND `tb_empresa`.`id` = (SELECT `tb_movimento`.`id_empresa` FROM `tb_movimento` WHERE `tb_movimento`.`id_usuario` = ?) AND `tb_categoria`.`id` = (SELECT `tb_movimento`.`id_categoria` FROM `tb_movimento` WHERE `tb_movimento`.`id_usuario` = ?) LIMIT 1;

Esse código vai pegar o nome da empresa e o nome da categoria de duas tabelas distintas com base no id obtido na tabela "tb_movimento", alem de pegar os valores da tabela "tb_movimento".

 

Recomendo você a alterar os comandos SQL para maiúsculo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@GabrielSennaMs eu coloquei seu código mas deu esse erro aqui 

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id_usuario' in where clause is ambiguous' in C:\xampp\htdocs\Financeiro\DAO\MovimentoDAO.php:60 Stack trace: #0 C:\xampp\htdocs\Financeiro\DAO\MovimentoDAO.php(60): PDOStatement->execute() #1 C:\xampp\htdocs\Financeiro\admin\consultar_movimento.php(6): MovimentoDAO->ConsultarMovimento() #2 {main} thrown in C:\xampp\htdocs\Financeiro\DAO\MovimentoDAO.php on line 60

Eu atualizei meu código e meu professor disse que está quase lá só não sei onde está errado, sabe onde está?

<?php

require_once 'Conexao.php';
require_once 'UtilDAO.php';

class MovimentoDAO extends Conexao {

    public function CadastrarMovimento(MovimentoVO $vou) {
        if ($vou->getMovimento() || $vou->getData() == '' || $vou->getIdCategoria() == '' || $vou->getIdEmpresa() == '' || $vou->getValor() == '') {
            return 0;
        }
        
        //1 PASSO: Criar um obj que receberá o obj de conexão
        $conexao = parent::retornaConexao();

        //2 PASSO: Criar uma variável que receberá o comando SQL que deverá ser executado
        $comando = 'insert into tb_movimento (tipo_movimento, data_movimento, valor_movimento, obs_movimento, id_usuario, id_categoria, id_empresa value(?,?,?,?,?,?,?)';

        //3 PASSO: Criar um objeto que será configurado para ser executado NO MYSQL
        $sql = new PDOStatement();

        //4 PASSO: O objeto configurado SQL receberá a conexão que vai estar preparada para o comando
        $sql = $conexao->prepare($comando);

        //5 PASSO: Verifica se tem no $comando pontos de interrogação. Se tiver configura o bindValue
        $sql->bindValue(1, $vou->getMovimento());
        $sql->bindValue(2, $vou->getData());
        $sql->bindValue(3, $vou->getValor());
        $sql->bindValue(4, $vou->getObs());
        $sql->bindValue(5, UtilDAO::CodigoLogado());
        $sql->bindValue(6, $vou->getIdCategoria());
        $sql->bindValue(7, $vou->getIdEmpresa());
        try {
            $sql->execute();
            return 1;
        } catch (Exception $ex) {
            echo $ex->getMessage();
            return -1;
        }
    }
    public function AlterarMovimento(MovimentoVO $vou) {
        if ($vou->getMovimento() || $vou->getData() == '' || $vou->getIdCategoria() == '' || $vou->getIdEmpresa() == '' || $vou->getValor() == '') {
            return 0;
        }
    }

    public function ConsultarMovimento() {
        $conexao = parent::retornaConexao();

        $comando = 'select id_movimento, tipo_movimento, data_movimento, valor_movimento, obs_movimento, nome_categoria, nome_empresa from tb_movimento inner join tb_categoria inner join tb_empresa on tb_movimento.id_usuario = tb_categoria.id_usuario = tb_empresa.id_usuario where id_usuario = ?';

        $sql = new PDOStatement();
        $sql = $conexao->prepare($comando);

        $sql->bindValue(1, UtilDAO::CodigoLogado());

        //Elimina o índice do array
        $sql->setFetchMode(PDO::FETCH_ASSOC);

        $sql->execute();

        return $sql->fetchAll();
    }

}

 

adicionado 13 minutos depois

Atualizei o código porém está com erro ainda 

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id_usuario' in where clause is ambiguous' in C:\xampp\htdocs\Financeiro\DAO\MovimentoDAO.php:60 Stack trace: #0 C:\xampp\htdocs\Financeiro\DAO\MovimentoDAO.php(60): PDOStatement->execute() #1 C:\xampp\htdocs\Financeiro\admin\consultar_movimento.php(6): MovimentoDAO->ConsultarMovimento() #2 {main} thrown in C:\xampp\htdocs\Financeiro\DAO\MovimentoDAO.php on line 60

<?php

require_once 'Conexao.php';
require_once 'UtilDAO.php';

class MovimentoDAO extends Conexao {

    public function CadastrarMovimento(MovimentoVO $vou) {
        if ($vou->getMovimento() || $vou->getData() == '' || $vou->getIdCategoria() == '' || $vou->getIdEmpresa() == '' || $vou->getValor() == '') {
            return 0;
        }
        
        //1 PASSO: Criar um obj que receberá o obj de conexão
        $conexao = parent::retornaConexao();

        //2 PASSO: Criar uma variável que receberá o comando SQL que deverá ser executado
        $comando = 'insert into tb_movimento (tipo_movimento, data_movimento, valor_movimento, obs_movimento, id_usuario, id_categoria, id_empresa value(?,?,?,?,?,?,?)';

        //3 PASSO: Criar um objeto que será configurado para ser executado NO MYSQL
        $sql = new PDOStatement();

        //4 PASSO: O objeto configurado SQL receberá a conexão que vai estar preparada para o comando
        $sql = $conexao->prepare($comando);

        //5 PASSO: Verifica se tem no $comando pontos de interrogação. Se tiver configura o bindValue
        $sql->bindValue(1, $vou->getMovimento());
        $sql->bindValue(2, $vou->getData());
        $sql->bindValue(3, $vou->getValor());
        $sql->bindValue(4, $vou->getObs());
        $sql->bindValue(5, UtilDAO::CodigoLogado());
        $sql->bindValue(6, $vou->getIdCategoria());
        $sql->bindValue(7, $vou->getIdEmpresa());
        try {
            $sql->execute();
            return 1;
        } catch (Exception $ex) {
            echo $ex->getMessage();
            return -1;
        }
    }
    public function AlterarMovimento(MovimentoVO $vou) {
        if ($vou->getMovimento() || $vou->getData() == '' || $vou->getIdCategoria() == '' || $vou->getIdEmpresa() == '' || $vou->getValor() == '') {
            return 0;
        }
    }

    public function ConsultarMovimento() {
        $conexao = parent::retornaConexao();

        $comando = 'select id_movimento, tipo_movimento, data_movimento, valor_movimento, obs_movimento, nome_categoria, nome_empresa from tb_movimento inner join tb_categoria on tb_categoria.id_categoria = tb_movimento.id_categoria inner join tb_empresa on tb_movimento.id_empresa = tb_empresa.id_empresa where id_usuario = ?';

        $sql = new PDOStatement();
        $sql = $conexao->prepare($comando);

        $sql->bindValue(1, UtilDAO::CodigoLogado());

        //Elimina o índice do array
        $sql->setFetchMode(PDO::FETCH_ASSOC);

        $sql->execute();

        return $sql->fetchAll();
    }

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Irwing Seiji Ato 

 

O erro que você recebe indica que a coluna `id_usuario` no seu "WHERE" cláusula é ambígua, o que significa que o sistema tem um problema para identificar a coluna apropriada porque há várias `id_usuario`.

 

Para corrigir esse problema, use o alias para especificar qual coluna você deseja usar para sua WHERE cláusula:

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Irwing Seiji Ato Especifica a tabela que vai usar no WHERE

 

WHERE `tb_movimento`.`id_usuario` = ?

 

 

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





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!