[RESOLVIDO] Lógica SQL e PHP - Dúvidas...

SELECT
ordem,
produto,
status
FROM
pedido
WHERE
ordem = {id_ordem} //numero da ordem que vier da variável

Possibilidade do status do produto:
0 - A executar
1 - Liberado
2 - Liberado com pendência

Minha questão é no php,
1)se dentro da ordem houver qualquer item que esteja com status “0”, o pedido terá o status “ABERTO”;

2)se dentro da ordem houver qualquer item que esteja com status “2”, e o restante com “1”, o pedido terá o status “COM PENDêNCIA”;

3)se dentro da ordem todos os itens estejam com status “1”, o pedido terá o status “CONCLUÍDO”;

O minha questão que não estou tendo idéia de fazer este select e tratar no PHP… alguma luz?

Só isso resolve todos os seus problemas.

SELECT
	p.ordem,
	p.data,
	p.cliente,
	IF((SELECT COUNT(*) FROM ordens_itens WHERE ordens_itens.ordem=p.ordem)=
	   (SELECT COUNT(*) FROM ordens_itens WHERE ordens_itens.ordem=p.ordem AND ordens_itens.status=0),'ABERTO',
	IF((SELECT COUNT(*) FROM ordens_itens WHERE ordens_itens.ordem=p.ordem)=
   	   (SELECT COUNT(*) FROM ordens_itens WHERE ordens_itens.ordem=p.ordem AND ordens_itens.status=1),'CONCLUIDO','PENDENTE')) AS Status_Pedido
FROM
	ordens AS p
WHERE
	p.ordem={id_ordem}

Dependendo o tamanho da base e o cliente pode usar a engine MyISAM/Aria para ganhar velocidade nas consultas.

Não compreendi seu código, mas mesmo assim tentei e deu erro de sintaxe…

Visão Macro, tabela com vários pedidos, dentro dos pedidos, o detalhe tem os itens, cada item tem seu status(a executar, executado, pendente), a verificação é feita dentro do pedido(detalhe), para que no pedido(pedido) seja alterado o status, mas para isto tenho esta regra…

1)se dentro do pedido houver qualquer item que esteja com status “0”, o pedido terá o status do mestre será “ABERTO”;

2)se dentro do pedido houver qualquer item que esteja com status “2”, e o restante com “1”, o pedido terá o status do mestre será “COM PENDêNCIA”;

3)se dentro do pedido todos os itens estejam com status “1”, o pedido terá o status do mestre será “CONCLUÍDO”;

Tem que adaptar os campos ‘nomes’ dos campos e ‘tabelas nome’ para suas tabelas, acho que isso você consegue fazer?

Eu acho que consigo sim… sua lógica não está na lógica do meu problema… obrigado amigo.

Olá Pessoal…
O amigo Emerson conseguiu matar a pau esta lógica infeliz… Valew!
Quero agradecer também ao @JVRoss que tentou ao máximo colaborar!!! Obrigado Pessoal…
Na Integra o caso…

$cmd = "
SELECT
id_os,
count(*) as qtd_status,
SUM(case when status_laboratorio = 0 then 1 else 0 end) as qtd_aexecutar,
SUM(case when status_laboratorio = 1 then 1 else 0 end) as qtd_liberado,
SUM(case when status_laboratorio = 2 then 1 else 0 end) as qtd_liberado_pendencia
FROM
oslojadetalhe
WHERE
id_os = [var_id_os]
GROUP BY id_os

";

sc_lookup(rs_dados, $cmd);

list( $id_os, $qtd_stat, $qtd_stat_0, $qtd_stat_1, $qtd_stat_2 ) = {rs_dados[0]};

$status_pedido_mae = ‘A Executar’; // Assume que qualquer coisa lá dentro seja status 0

if ( $qtd_stat_2 > 0 && $qtd_stat_1 > 0 ) $status_pedido_mae = ‘Com pendencia’;
if ( $qtd_stat_1 == $qtd_stat ) $status_pedido_mae = ‘Concluido’;

echo 'OS: ', [var_id_os], ’ Status: ', $status_pedido_mae;