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á.
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.
Valeu pela ajuda Haroldo.
Agora vem outra pergunta: Como eu monto o camando SQL e onde eu coloco comando?
Desculpa pela ignorância.
manda a estrutura das duas tabelas que podemos ajudar sim.
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.
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.
Assim que eu conseguir um tempo, monto um esqueminha para vc, se alguém aqui se manifestar antes, ótimo.
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 …
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á
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
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;