Ir para conteúdo

POWERED BY:

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 daemon
      Tenho 3 selects assim com varias categorias...
       
              $sql = "SELECT * FROM topicos          WHERE idcategoria = $idcategoria          AND pubdate BETWEEN NOW() - INTERVAL $intervalo1_horas_ou_minutos $tipo_intervalo1_horas_mnutos AND          NOW() - $intervalo2_horas_ou_minutos ORDER BY pubdate DESC LIMIT 1"; Preciso que na minha pagina principal (index) mostre este registro por 10minutos.. passando de 10 minutos mostra o resultado do proximo select (categoria)..
    • 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  
×

Informação importante

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