Jump to content
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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By tiagosp
      Em uma classe, tenho um método que realiza o select no sql, até o momento funciona com requisições que solicitam uma única linha, porém quando é solicitado todas as linhas, ele retorna apenas o primeiro registro contido no MySQL.
      <?php class SQL { private $SQLUsuario = "root"; private $SQLSenha = ""; private $SQLHost = "127.0.0.1"; private $SQLBD = "database1"; public function SQLSelecionar($Comando){ #Executa o comando Select no SQL $Conn2 = mysqli_connect($this->SQLHost, $this->SQLUsuario, $this->SQLSenha, $this->SQLBD); $resultado = mysqli_query($Conn2, $Comando); if (mysqli_num_rows($resultado) > 0){ return mysqli_fetch_assoc($resultado); } else{ #Select retornou sem resultado(s) return null; } mysqli_close($Conn2); } }  
    • By maurouni
      Tenho uma tabela com preços de fornecedores e preciso de um select que me retorne apenas o melhor preço do fornecedor conforme ilustra a imagem em anexo.

    • By Boca
      Pessoal preciso fazer uma consulta simples mas não estou obtendo resultado, tenho a seguinte tabela
      --------------- | ID | TID | --------------- | 56 | 2 | --------------- | 58 | 2 | --------------- | 25 | 8 | --------------- | 25 | 2 | --------------- | 12 | 9 | --------------- | 18 | 2 | --------------- | 45 | 10 | --------------- | 35 | 2 | --------------- | 18 | 8 | ---------------
      Minha consulta
      SELECT ID FROM table WHERE TID = 2 and TID = 8 GROUP BY ID

      resultado esperado
      25 e 18
       
    • By marcosberaldo
      Boa noite.
       
      Estou criando um ranking de pontuação e preciso colocar uma paginação nesse ranking mas não posso fazer a paginação pelo select, pois a select tem que somar os pontos de cada jogador informados em cada registro no banco, se eu limito a select ele só vai somar os pontos dos registros da página e não todos os pontos do jogador.
       
      Dessa forma optei por fazer a select normalmente e criar um array onde eu pretendo exibir somente parte dos dados.
       
      Em resumo, consegui fazer da seguinte forma:
      $dados = mysqli_query($conn, "SELECT *, sum(Pontos) as TotalPontos, sum(Acerto_Exato) as Acertos FROM placares INNER JOIN jogadores ON placares.JogadorID = jogadores.id WHERE campeonato='$campeonato' GROUP BY JogadorID ORDER BY TotalPontos DESC, Acertos DESC "); for($a = 0; $a < 9; $a++ ) { $row = mysqli_fetch_array($dados); echo $row['JogadorID']. " - " .$row['nome']; } Esse código me retorna 10 registros do array, até ai tudo bem, mas eu gostaria de exibir apenas um intervalo, por exemplo do registro 5 ao 9. 
      Tentei da seguinte forma:
      $dados = mysqli_query($conn, "SELECT *, sum(Pontos) as TotalPontos, sum(Acerto_Exato) as Acertos FROM placares INNER JOIN jogadores ON placares.JogadorID = jogadores.id WHERE campeonato='$campeonato' GROUP BY JogadorID ORDER BY TotalPontos DESC, Acertos DESC "); for($a = 5; $a < 9; $a++ ) { $row = mysqli_fetch_array($dados); echo $row['JogadorID']. " - " .$row['nome']; } Dessa forma ele me mostra apenas 5 registros, mas ele sempre me mostra os 5 primeiros e eu preciso carregar os últimos 5.
       
      Como faço???
    • By johnklo
      COM BASE NA TABELA HR DO ORACLE
      Preciso criar uma sub-rotina (procedure) que imprima na tela o número de funcionários (employees) agrupados por departamentos (department_id). Deve-se ordenar a saída em ordem decrescente pela quantidade de departamentos. Pode-se utilizar qualquer forma de cursor para imprimir o resultado.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.