Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ndias

array no select?

Recommended Posts

alguém conhece um jeito de no select percorrer valores separados por vírgula em um campo?

 

por ex: tenho um campo em uma tabela com os valores SB, BA

 

qro selecionar todos que contenham S e A

 

se eu usar o in ('S','A'), o resultado vai ser

S

A

 

ou seja, só vai trazer o valor que conter só S ou só A

 

e se eu usar o like '%S%' or like ''%A%, o resultado pode também ser

SB

BA

 

quero que traga, por exemplo:

S

SB

BA

A

 

Ou seja, se tiver o S e também outros valores no campo junto com o S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Fiz algo parecido, só que com PHP e Javascript;

 

Vê se serve para você alguma coisa:

 

 

Segue código em Javascript

document.getElementById("btn-addCell").addEventListener('click', function() {
			
			
			
		/* Produto da Tabela */
		var selectProduto = document.createElement('select');
		selectProduto.className = 'updateFields select';
		selectProduto.setAttribute('name', 'nomeProduto[]');
			
			
		var tdSelectionOptionProduto = document.createElement('td');
		tdSelectionOptionProduto.appendChild(selectProduto);
 
  		/* Para colocar o Select no Body, dentro de uma tr (table) */
  		var tr = document.createElement('tr');
		tr.appendChild(tdSelectionOptionProduto);
  		document.getElementById("body-table").appendChild(tr);
		updateFields();
  
  
  		/* Para pegar os dados do MySQL/Array no seu caso */
  		var dados = [<?
			
			$i = 1;
			$sql7 = "SELECT * FROM produto ORDER BY nomeProduto ASC";
			$qr7 = mysqli_query($con, $sql7) or die(mysqli_error());
			$number = mysqli_num_rows($qr);
			while($ln7 = mysqli_fetch_assoc($qr7)){
				
			if($i < $number){
				echo '"'.$ln7['nomeProduto'].'", ';
			} else{
				echo '"'.$ln7['nomeProduto'].'"';
			}
				
				$i++;
			}
			?>];
			
		dados.forEach(function(item){
			$('.select').append('<option>' + item + '</option>');
			});
	});	
  		
  	
}

 

Vê se consegue implementar, qualquer coisa é só falar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você usar o LIKE '%A%' OR LIKE '%S%' certamente irá listar S, SB, BA e A, pois todos estes registros contém 'A' ou 'S'.

 

Agora vem a dúvida: você afirmou que na tabela possui os valores 'SB' e 'BA'. Como quer que seja listado 'S' e 'A' se não contém na sua tabela? E caso você esteja considerando a possibilidade de haver também os valores 'S' e 'A', então os quatro resultados serão retornados na sua pesquisa no exemplo acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Anthony, obrigado! Eu consigo resolver com dois arrays no PHP, mas quero uma solução no SQL para ganhar performance.

 

Eziquiel, esse foi só um exemplo que usei. Na tabela contém: só S, só A, só SB, só BA, S e A, S e SB, S e BA, SB e A...etc, etc, etc....

 

Enfim...todas as combinações possíveis...pode existir tudo  S, SB, BA e A

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por FabianoSouza
      Eu preciso exibir duas informações em minha consulta:
      1) A quantidade de pessoas inscritas numa turma de treinamento (isso é feito com um simples COUNT)
      2) Uma flag de excesso de inscrições na turma. Seria obtido pela comparação entre a quantidade máxima permitida (já existe esse campo) e o COUNT feito acima.
       
      Até aqui sem problemas.
       
      O que quero é evitar fazer duas contagens (1 para saber a quantidade de inscritos, e outra para gerar a flag de excesso de inscrições).
       
      Há uma forma de utilizar UMA contagem para atender as duas necessidades?
       
      Meu código está assim:
       
      ... --AQUI FAZ A COMPARAÇÃO PARA GERAR A FLAG DE EXCESSO DE INSCRIÇÕES , CASE WHEN (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) > T.lotacaoMax Then T.nome + '&nbsp;'+'<span class=%22icon-aviso fcolor-critico%22 style=%22font-size:18px%22 title=Excesso&nbsp;de&nbsp;inscrições></span>' --AQUI FAZ A CONTAGEM DE INSCRIÇÕES , (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) AS 'Inscrições'  
    • Por FabianoSouza
      Possuo uma coluna de data.
      Eu gostaria que os registros com datas futuras aparecessem no topo do meu select, em relação aos demais registros.
      Em seguida, gostaria que somente esses registros com datas futuras ficassem em ordem crescente.
      Algo como 
       
      João  | 16/11/2023
      Maria | 17/11/2023
      José  |  20/11/2023
       
      -----------------------------
      (demais registros da base)
      Antônio   |  20/05/2023
      Rosa        | 15/08/2023
      Cida         | 15/10/2022
      Pedro      |  20/05/2021
      Paulo      |  14/11/2020
       
      O select seria esse.
      select dbo.formataData(ET.dataInicial) AS 'data' FROM dbo.tab AS ET GROUP BY ET.dataInicial  
    • Por FabianoSouza
      Tenho uma function que precisa receber 02 argumentos.
      Ela funciona se eu aplicar num select qualquer. Mas se eu aplicar num select dinâmico, ocorre erro.
      Veja trecho do meu select.
      ... SET @sql = @sql +', dbo.retornaIco_ItemBloq((SELECT COUNT(*) FROM dbo.tab AS TT2 WHERE TT2.codCategTreina = CTT.id),'+@title+') AS ''resp''' ... No caso, o primeiro argumento da function dbo.retornaIco_ItemBloq é um SELECT COUNT.
      O segundo argumento é uma variável (que está devidamente declarada e definida).
       
      O erro ocorre porque ao executar (chamando EXEC(@sql) ), o SQL entende que o segundo argumento é uma coluna da consulta principal, pois existe uma vírgula antes da variável @title (que é o segundo argumento da function).
      Repito. Se eu aplicar essa function num select normal, funciona normalmente. Porém, preciso que funcione num SQL dinâmico porque é esse é o padrão que estou adotando para o sistema todo.
       
      A function dbo.retornaIco_ItemBloq faz o seguinte:
      1) Recebe o valor do COUNT e da variável @title
      2) Se o COUNT for maior que  Zero, cria uma tag HTML (uma SPAN), define sua title com o valor da variável @title e passa para uma variável
      3) Retorna o HTML que será exibido no resultado da consulta principal
      É super simples.
       
      Há outra forma de chamar a function?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.