ScriptCase Forum

Desenvolvedores => Diversos => Tópico iniciado por: AdrianoBr em Julho 05, 2010, 01:17:54 pm

Título: Busca em duas tabelas
Enviado por: AdrianoBr em Julho 05, 2010, 01:17:54 pm
Pessoal, eu sou novo em programação PHP e ScriptCase.
Preciso de ajuda.
Eu preciso buscar o preço de um produto em duas tabelas: Produtos e preço especial.
Caso o produto exista nas duas tabelas, eu devo carregar o preço da tabela preço especial, caso contrário eu devo carregar o preço da tabela produtos.
Eu não tenho a menor idéia de como fazer isso no scriptcase.
Agradeço desde já.
Título: Re: Busca em duas tabelas
Enviado por: Haroldo em Julho 05, 2010, 01:29:34 pm
Isso não requer conhecimento de PHP ou Scriptcase, e sim de SQL.
Primeiro eu construiria uma view para as duas tabelas, onde teria um select com union, apartir daí é só usar o case.
Título: Re: Busca em duas tabelas
Enviado por: AdrianoBr em Julho 05, 2010, 02:34:44 pm
Valeu pela ajuda Haroldo.
Agora vem outra pergunta: Como eu monto o camando SQL e onde eu coloco comando?
Desculpa pela ignorância.
Título: Re: Busca em duas tabelas
Enviado por: Haroldo em Julho 05, 2010, 02:45:45 pm
manda a estrutura das duas tabelas  que podemos ajudar sim.

Isso não requer conhecimento de PHP ou Scriptcase, e sim de SQL.
Primeiro eu construiria uma view para as duas tabelas, onde teria um select com union, apartir daí é só usar o case.

Título: Re: Busca em duas tabelas
Enviado por: Diogo Toscano em Agosto 08, 2010, 12:56:11 am
seria apenas uma left join de produtos com preco especial e um case para testar se o preco especial for null, pega o preco de produtos, se nao, pega o preco da preco especial.

espero ter ajudado.
Título: Re: Busca em duas tabelas
Enviado por: AdrianoBr em Agosto 18, 2010, 11:17:48 am
Harold,
Me desculpe pela demora, mas tive alguns problemas e faz quase 2 meses q ñ desenvolvo nada.
Mas abaixo está a estrutura das tabelas, como vc havia pedido:

CREATE TABLE tb_produtos (
  id_produtos SMALLINT UNSIGNED NOT NULL,
  descricao VARCHAR(40) NOT NULL,
  unidade_entrega VARCHAR(2) NULL,
  valor_unitario NUMERIC(12,2) NULL,
  PRIMARY KEY(id_produtos),
  INDEX tb_produtos_index1038(descricao)
);

CREATE TABLE tb_produtos_esp (
  id_cadastro INTEGER UNSIGNED NOT NULL,
  id_produtos SMALLINT UNSIGNED NOT NULL,
  valor_unitario NUMERIC(12,2) NOT NULL,
  PRIMARY KEY(id_cadastro, id_produtos)
);

Obrigado pela ajuda.
Título: Re: Busca em duas tabelas
Enviado por: Haroldo em Agosto 18, 2010, 11:20:56 am
Assim que eu conseguir um tempo, monto um esqueminha para vc, se alguém aqui se manifestar antes, ótimo.



Harold,
Me desculpe pela demora, mas tive alguns problemas e faz quase 2 meses q ñ desenvolvo nada.
Mas abaixo está a estrutura das tabelas, como vc havia pedido:

CREATE TABLE tb_produtos (
  id_produtos SMALLINT UNSIGNED NOT NULL,
  descricao VARCHAR(40) NOT NULL,
  unidade_entrega VARCHAR(2) NULL,
  valor_unitario NUMERIC(12,2) NULL,
  PRIMARY KEY(id_produtos),
  INDEX tb_produtos_index1038(descricao)
);

CREATE TABLE tb_produtos_esp (
  id_cadastro INTEGER UNSIGNED NOT NULL,
  id_produtos SMALLINT UNSIGNED NOT NULL,
  valor_unitario NUMERIC(12,2) NOT NULL,
  PRIMARY KEY(id_cadastro, id_produtos)
);

Obrigado pela ajuda.
Título: Re: Busca em duas tabelas
Enviado por: Diogo Toscano em Agosto 23, 2010, 11:30:16 am
Eu fiz de cabeça, então seria necessario testar:

SELECT
   tbp.id_produtos,
   tbp.descricao,
   tbp.unidade_entrega,
   CASE WHEN tbpe.valor_unitario>0 THEN tbpe.valor_unitario ELSE tbp.valor_unitario END as valor_unitario
FROM
   tb_produtos tbp LEFT OUTER JOIN tb_produtos_esp tbpe ON tbp.id_produtos = tbpe.id_produtos

Do mais, pra n ficar dando select direto na join, voce pode criar uma view:

create view vw_produtos as SELECT
   tbp.id_produtos,
   tbp.descricao,
   tbp.unidade_entrega,
   CASE WHEN tbpe.valor_unitario>0 THEN tbpe.valor_unitario ELSE tbp.valor_unitario END as valor_unitario
FROM
   tb_produtos tbp LEFT OUTER JOIN tb_produtos_esp tbpe ON tbp.id_produtos = tbpe.id_produtos


e na aplicação basta dar um select * from vw_produtos que iria ficar transparente pra voce.

so precisa testar se quando n tem na especial isso é falso: tbpe.valor_unitario>0
se nao teria que testar tbpe.valor_unitario>0 or tbpe.valor_unitario is not null ....
Título: Re: Busca em duas tabelas
Enviado por: Eduardo Alves em Novembro 25, 2010, 11:01:31 am
Tentei varias formas. Teria jeito de eu fazer um select no meu mysql desta forma (reparem que estou com duas tabelas diferentes)

 SELECT  (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli = 'P')  AS Entrada,
 
         (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli <> 'P')  AS Saida,
         
         (SELECT COUNT(*) FROM adm_clientes) AS total FROM adm_clientes
                 
         (SELECT COUNT(*) FROM adm_os) AS ost FROM adm_os;   

tentei tb:

SELECT
   COUNT(os.id) AS total,
   COUNT(clie.Tpcli) AS certo
FROM
   adm_os os,
   adm_clientes clie

tb tentei assim:

SELECT COUNT(ClienteId) AS t FROM adm_clientes

UNION

SELECT COUNT(ID) AS g FROM adm_os

UNION

SELECT COUNT(ClienteId) AS i FROM adm_clientes WHERE Tpcli = 'P'

mais não deu certo, so aparece a primeira coluna


Obs: se eu usar somente a tabela adm_clientes ele fica 100%, mais como trabalhar com 2 tabelas diferentes como no modo apresentado acima ??

Agradeço a colaboração desde já
Título: Re: Busca em duas tabelas
Enviado por: Haroldo em Novembro 25, 2010, 12:15:46 pm
SELECT  (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli = 'P')  AS Entrada,
 
         (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli <> 'P')  AS Saida,
        
         (SELECT COUNT(*) FROM adm_clientes) AS total,
                 
          COUNT(*) FROM adm_os) AS ost FROM adm_os;   


ou

SELECT COUNT(ClienteId),"total"  FROM adm_clientes

UNION all

SELECT COUNT(ID),"g"  FROM adm_os

UNION all

SELECT COUNT(ClienteId),"i.." FROM adm_clientes WHERE Tpcli = 'P'

//AQUI SAI O POR LINHAS MESMO



Tentei varias formas. Teria jeito de eu fazer um select no meu mysql desta forma (reparem que estou com duas tabelas diferentes)

 SELECT  (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli = 'P')  AS Entrada,
 
         (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli <> 'P')  AS Saida,
        
         (SELECT COUNT(*) FROM adm_clientes) AS total FROM adm_clientes
                 
         (SELECT COUNT(*) FROM adm_os) AS ost FROM adm_os;   

tentei tb:

SELECT
   COUNT(os.id) AS total,
   COUNT(clie.Tpcli) AS certo
FROM
   adm_os os,
   adm_clientes clie

tb tentei assim:

SELECT COUNT(ClienteId) AS t FROM adm_clientes

UNION

SELECT COUNT(ID) AS g FROM adm_os

UNION

SELECT COUNT(ClienteId) AS i FROM adm_clientes WHERE Tpcli = 'P'

mais não deu certo, so aparece a primeira coluna


Obs: se eu usar somente a tabela adm_clientes ele fica 100%, mais como trabalhar com 2 tabelas diferentes como no modo apresentado acima ??

Agradeço a colaboração desde já
Título: Re: Busca em duas tabelas
Enviado por: Eduardo Alves em Novembro 25, 2010, 01:57:09 pm
blz mano..vlw..

Ficou assim:

SELECT  (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli = 'P')  AS Entrada,
 
        (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli <> 'P')  AS Saida,
         
        (SELECT COUNT(*) FROM adm_clientes) AS total,
                 
        (SELECT COUNT(*) FROM adm_os WHERE situacao_os = '1') AS ost FROM adm_os LIMIT 1;

SELECT  (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli = 'P')  AS Entrada,
 
         (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli <> 'P')  AS Saida,
        
         (SELECT COUNT(*) FROM adm_clientes) AS total,
                 
          COUNT(*) FROM adm_os) AS ost FROM adm_os;   


ou

SELECT COUNT(ClienteId),"total"  FROM adm_clientes

UNION all

SELECT COUNT(ID),"g"  FROM adm_os

UNION all

SELECT COUNT(ClienteId),"i.." FROM adm_clientes WHERE Tpcli = 'P'

//AQUI SAI O POR LINHAS MESMO



Tentei varias formas. Teria jeito de eu fazer um select no meu mysql desta forma (reparem que estou com duas tabelas diferentes)

 SELECT  (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli = 'P')  AS Entrada,
 
         (SELECT COUNT(*) FROM adm_clientes WHERE Tpcli <> 'P')  AS Saida,
        
         (SELECT COUNT(*) FROM adm_clientes) AS total FROM adm_clientes
                 
         (SELECT COUNT(*) FROM adm_os) AS ost FROM adm_os;   

tentei tb:

SELECT
   COUNT(os.id) AS total,
   COUNT(clie.Tpcli) AS certo
FROM
   adm_os os,
   adm_clientes clie

tb tentei assim:

SELECT COUNT(ClienteId) AS t FROM adm_clientes

UNION

SELECT COUNT(ID) AS g FROM adm_os

UNION

SELECT COUNT(ClienteId) AS i FROM adm_clientes WHERE Tpcli = 'P'

mais não deu certo, so aparece a primeira coluna


Obs: se eu usar somente a tabela adm_clientes ele fica 100%, mais como trabalhar com 2 tabelas diferentes como no modo apresentado acima ??

Agradeço a colaboração desde já