Select com alguns campos

Tenho uma tabela e preciso fazer um select capturando somente os campos que possui conteudo para exibir em um campo select

Olhem os dados na tabela

Conforme a imagem acima eu teria que exibir em um select que ficaria assim

registro com id 18 no campo select exibiria
EDITAL
EDITAL ANTIGO
COMUNICADO

id 6 NÃO ENTRARIA NO SELECT POIS NAO TEM NADA

id 5
CONTRATO

id 8
CONTRATO

id 10
CONTRATO

e por ai vai

Se alguem tiver uma ideia eu fico imensamente agradecido porque a moringa ja quase explodindo e eu ainda num achei uma solução

Valeu

Carlos
Piracicaba / SP (cidade mais quente que a moringa do cunha…rs**)

com este exemplo pelo que entendi tu quer transformar coluna em linhas, cara tu vai ter trabalho com este select .

É meu amigo Willian Fernando eu ja to passando por isso…faz uns dias que to nessa select, acho que ja perdi a conta de quantas vezes eu fiz e refiz…e nada…mas uma hora aparece uma solução

Consegui fazer o seguinte…criei um campo texto chamado documento e no evento onRecord coloquei assim

sc_lookup(rs, “SELECT edital_atual, edital_antigo, comunicado, contrato_atual, status FROM transp_licitacoes WHERE id= ‘{id}’”);
$rs_edital_atual = {rs[0][0]};
$rs_edital_antigo = {rs[0][1]};
$rs_comunicado = {rs[0][2]};
$rs_contrato_atual = {rs[0][3]};
$rs_status = {rs[0][4]};

if ($rs_edital_atual != ‘’) {$campo1 = “EDITAL ATUAL”;} else{$campo1 = ‘’;}
if ($rs_edital_antigo != ‘’) {$campo2 = “EDITAL ANTIGO”;}else{$campo2 = ‘’;}
if ($rs_comunicado != ‘’) {$campo3 = “COMUNICADO”;} else{$campo3 = “”;}
if ($rs_contrato_atual != ‘’){$campo4 = “CONTRATO”;} else{$campo4 = “”;}

// PREENCHE O SELECT
{documentos} = “”;
{documentos} .= ‘’;

if (($rs_edital_atual != ‘’))
{
{documentos} .= ‘’.$campo1.’’;
[campo1] = $rs_edital_atual;
}

if (($rs_edital_antigo != ‘’) && ($rs_edital_atual != ‘’))
{
{documentos} .= ‘’.$campo2.’’;
[campo2] = $rs_edital_antigo;
}

if (($rs_comunicado != ‘’))
{
{documentos} .= ‘’.$campo3.’’;
[campo3] = $rs_comunicado;
}

if (($rs_contrato_atual != ‘’))
{
{documentos} .= ‘’.$campo4.’’;
[campo4] = $rs_contrato_atual;
}

{documentos} .= “”;

Ele exibe os valores no select, porem não estou conseguindo capturar em um evento o valor do select

Tentei fazer pelo eventoAjax documentos.onclick

sc_lookup(rss, “SELECT edital_atual, edital_antigo, comunicado, contrato_atual FROM transp_licitacoes WHERE id = ‘{id}’”);
$edital_atual = {rss[0][0]};
$edital_antigo = {rss[0][1]};
$comunicado = {rss[0][2]};
$contrato_atual = {rss[0][3]};
$caminho = “…/frm_licitacoes_cadastro/editais/”;

if ([campo1] != ‘’){
if ($edital_atual != ‘’){
$arq2 = $caminho.$edital_atual;
$file_headers = @get_headers($arq2);

  if ($file_headers[0] == 'HTTP/1.1 404 Not Found') {
     sc_alert("Nenhum documento encontrado.");
  }else {
     sc_redir($arq2, "", "_blank");
}

}
}

Mas ele não consegue capturar o valor do select

Ta osso…

Eu so consigo agora mesmo pensar em uma view com UNION ALL por cada situação, ou brincar com CASE ou IF si for mysql

Veja o exemplo si te serve, adapte ele.

create table test
(id int auto_increment primary key,
edital_atual varchar(60),
edital_antigo varchar(60),
comunicado varchar(60),
contrato_atual varchar(60));


INSERT INTO `test` (`id`,`edital_atual`,`edital_antigo`,`comunicado`,`contrato_atual`) VALUES (1,'ID_1_autal','ID_1_antigo','ID_1_comunicado',NULL);
INSERT INTO `test` (`id`,`edital_atual`,`edital_antigo`,`comunicado`,`contrato_atual`) VALUES (2,NULL,NULL,NULL,NULL);
INSERT INTO `test` (`id`,`edital_atual`,`edital_antigo`,`comunicado`,`contrato_atual`) VALUES (3,NULL,NULL,NULL,'ID_3_contrato');
INSERT INTO `test` (`id`,`edital_atual`,`edital_antigo`,`comunicado`,`contrato_atual`) VALUES (4,'ID_4_atual',NULL,NULL,NULL);
INSERT INTO `test` (`id`,`edital_atual`,`edital_antigo`,`comunicado`,`contrato_atual`) VALUES (5,NULL,NULL,NULL,'ID_5_contrato');
INSERT INTO `test` (`id`,`edital_atual`,`edital_antigo`,`comunicado`,`contrato_atual`) VALUES (6,NULL,NULL,NULL,'ID_6_contrato');


create or replace view view_test as 
select id,0 as ordem,'EDITAL ATUAL' as valor
from test where edital_atual is not null and length(trim(edital_atual)) >= 1
UNION ALL
select id,1 as ordem,'EDITAL ANTIGO' as valor
from test where edital_antigo is not null and length(trim(edital_antigo)) >= 1
UNION ALL
select id,2 as ordem,'COMUNICADO' as valor
from test where comunicado is not null and length(trim(comunicado)) >= 1
UNION ALL
select id,3 as ordem,'CONTRATO ATUAL' as valor
from test where contrato_atual is not null and length(trim(contrato_atual)) >= 1
;


select * from view_test order by id,ordem

resultado algo como isto

Criei a view e no evento onRecord to tentando fazer assim

$sql = “select id, ordem, valor from view_licitacoes WHERE id= ‘{id}’ GROUP BY id, ordem, valor ORDER BY id,ordem”;
sc_lookup(rs,$sql);

if({rs} !== FALSE && count({rs}) != 0)
{

for($i = 0;$i < count({rs});$i++){
// aqui tu monta como quiser
$rs_valor = {rs[$i][2]};
{documentos} = “”;
{documentos} .= ‘’;
{documentos} .= ‘’.$rs_valor.’’;
{documentos} .= “”;
}
}

O “pobrema” é que ele exibe somente o ultimo dado do registro, se tiver 1 registro, caso tenha mais de 1 só exibe o ultimo.

e tb num ta fazendo o filtro pelo {id}

Acho que a zica ta no while

Alguem tem uma ideia ?

Não, a view, ja é para vincular direto ao Campo SELECT, no lookup do mesmo

Então meu amigo Willian Fernando o problema é que é uma aplicação CONSULTA e ela não tem o campo select, ou então eu to mesmo de bobeira e o sc ta me dando uma surra…rs**

ah de convir comigo que vc não pode ter colunas diferentes.

crie um select em SQL da consulta.

SELECT id, ’ ’ as edital_atual,’ ’ as edital_antigo,’ ’ as comunicado, ’ ’ as contrato_atual FROM transp_licitacoes

no evento onrecord:

vc faz o select por id e realimenta seus campos.

ja não entendi mais nada, desisto

então Willian, ele não tinha deixado claro inicialmente que era uma consulta.
Mas sua lógica tb funciona criando uma view.

Muito obrigado pessoal pela ajuda…

Captando suas ideias eu juntei e consegui fazer utilizando a view que o Willian me passou

Fiz no evento onRecord assim

$sql = “select id, ordem, valor, count(id) from view_licitacoes WHERE id= ‘{id}’ GROUP BY id, ordem, valor ORDER BY id,ordem”;
sc_select(rs, $sql);

if (!empty({rs})) { // AQUI TEORICAMENTE TERIA QUE CONSTRUIR SOMENTE SE TIVESSE DADOS
{documentos} = “”;
{documentos} .= ‘’;
while(!$rs->EOF)
{
$rs_valor = $rs->fields[2];
{documentos} .= ‘’.$rs_valor.’’;
$rs->MoveNext();
}
{documentos} .= “”;

}
$rs->Close();

Ta exibindo legal os campos, porem estou com 2 dificuldades

1 - Mesmo que não tenha dados nenhum, ele exibe o select vazio na linha, ou seja, o if (!empty({rs})) { não ta funfando
2 - Nao consigo formatar o campo select, acredito que por ser construido dinamicamente ele mata a formatação manual.

Mas a ideia foi excelente, obrigado a vcs

Abraço

Carlos
Piracicaba/SP (chovendo, mas ainda quase uma sucursal do inferno de tanto calor que ta…rs*)

bom , pelo menos a minha ideia não tava tão errada rsrsr, sobre tu ultima pergunta, não sei quase nada de CSS