Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Usando IF em um select


crazySerk

Pergunta

Fala galera, to precisando de novamente uma ajuda aqui.

Tentarei ser o mais claro em minha dúvida, bom gostaria de saber se é possivel usar em um select as clausulas IF, sim como poderia montar este select...

Minha estrutura da tabela:

SELECT
`cod_opcional`,
`cod_modelo`,
`cod_marca`,
`cod_empresa`,
`todos_modelos`,
`desc_opcional`,
`valor`,
`status`
FROM
`veic_opcional`
eu preciso retornar 2 campos, o cod_opcional, e o desc_opcional, porém isso tudo dependerá da informação que o atributo todos_modelos possui.
Por exemplo, se no campo Todos_modelos estiver com o valor 1, eu preciso verificar o atributo cod_modelo se bate com o id que estarei informando, por exemplo: 25.
Se todos_modelos estiver como valor 2, então ele precisa mostrar esse opcional ( não vai fazer nenhuma comparação...)
Ou se Todos_modelos estiver com o valor 3 então preciso verificar um valor na tabela cod_marca exemplo: 4
Bem não sei se a minha dúvida ficou bem clara, mas isso que to precisando, procurei algumas coisas na internet vi falando algo sobre o CASE mas nenhum exemplo de facil entendimento.
Eu consegui montar isso através do meu codigo php, mas acredito que montando através do banco fica melhor o desempenho. :)
Agradeço a ajuda.
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Então Denis depois que postei o tópico, vi que ficou meio confuso mesmo...

Tenta explicar o que eu estou fazendo,

Tenho veiculos cadastrado, porém no ato de cadastrar um opcional o cara poderá escolher para cadastrar esse opcional para apenas os veiculos de uma marca Exemplo ( Escapamento Gol, cadastrado para toda marca Volks ) ( Na Bd iria ficar, todos_modelos = 1 , e no campo cod_marca = 2 )

Ou

Cadastrar o opcional para todos os veiculos( se o usuario tiver 10 veiculos cadastrados vai aparecer para as 10 ) (Na bd iria ficar todos_modelos = 2 e cod_marca = null e cod_modelo = null )

Ou cadastrar apenas o veiculo para um veiculo especifico ( todos_modelos = 3 e o cod_modelo = 4)

Não sei se ficou ainda claro, mas depois analisei melhor e acredito que apenas via PHP mesmo que daria para separar isso, assim eu montei esse combo:

	$codModelo = (int)$_POST['codModelo'];
			
			$Query = $Mysqli->query("select cod_opcional,
								  a.cod_modelo,
								  a.cod_marca,
								  a.todos_modelos,
								  a.desc_opcional
							  from 
							  	  veic_opcional a
							  where
							  	  a.cod_empresa = ".$_SESSION['d_cod_empresa']);
			
			//selecionar a cod_marca do veiculo selecionado
			$QueryC = $Mysqli->query("select cod_marca from empresas_veiculos where cod_modelo = ".$codModelo);
			$ObC = $QueryC->fetch_array();

			if($Query->num_rows > 0){
				
				while($Ob = $Query->fetch_array()){
					
					//verifico se o valor de todos os modelos é diferente do que 2 se for
					//verifico se o cod_modelo nao está vazio se nao estiver
					//verifico se o modelo que o usuario seleciono é o mesmo que está cadastrado se for exibo
					if($Ob['todos_modelos'] != '2' && !empty($Ob['cod_modelo']) && $Ob['cod_modelo'] == $codModelo ){
						echo "<option value=\"".$Ob['cod_opcional']."\">".utf8_encode($Ob['desc_opcional'])."</option>";
					}
					
					//verifico se o valor de todos os modelos é diferente do que 2 se for
					//verifico se o cod_marca nao está vazio se nao estiver
					//verifico se a marca que é a mesma que ele está cadastrado
					else if($Ob['todos_modelos'] != '2' && !empty($Ob['cod_marca']) && !empty($ObC['cod_marca']) && $Ob['cod_marca'] == $ObC['cod_marca'] ){
						echo "<option value=\"".$Ob['cod_opcional']."\">".utf8_encode($Ob['desc_opcional'])."</option>";
					}
					
					//verifico se a coluna todos_modelos possui o valor 2 ( todoos os modelos )
					//verifico se cod_modelo e cod_marca estão vazios
					else if($Ob['todos_modelos'] == '2' && empty($Ob['cod_marca']) && empty($Ob['cod_modelo'])){
						echo "<option value=\"".$Ob['cod_opcional']."\">".utf8_encode($Ob['desc_opcional'])."</option>";
					}
					
				}
					
			}else{
				echo "ERRO";
			}
Link para o comentário
Compartilhar em outros sites

  • 0

Então Denis depois que postei o tópico, vi que ficou meio confuso mesmo...

Tenta explicar o que eu estou fazendo,

Tenho veiculos cadastrado, porém no ato de cadastrar um opcional o cara poderá escolher para cadastrar esse opcional para apenas os veiculos de uma marca Exemplo ( Escapamento Gol, cadastrado para toda marca Volks ) ( Na Bd iria ficar, todos_modelos = 1 , e no campo cod_marca = 2 )

Ou

Cadastrar o opcional para todos os veiculos( se o usuario tiver 10 veiculos cadastrados vai aparecer para as 10 ) (Na bd iria ficar todos_modelos = 2 e cod_marca = null e cod_modelo = null )

Ou cadastrar apenas o veiculo para um veiculo especifico ( todos_modelos = 3 e o cod_modelo = 4)

Não sei se ficou ainda claro, mas depois analisei melhor e acredito que apenas via PHP mesmo que daria para separar isso, assim eu montei esse combo:

	$codModelo = (int)$_POST['codModelo'];
			
			$Query = $Mysqli->query("select cod_opcional,
								  a.cod_modelo,
								  a.cod_marca,
								  a.todos_modelos,
								  a.desc_opcional
							  from 
							  	  veic_opcional a
							  where
							  	  a.cod_empresa = ".$_SESSION['d_cod_empresa']);
			
			//selecionar a cod_marca do veiculo selecionado
			$QueryC = $Mysqli->query("select cod_marca from empresas_veiculos where cod_modelo = ".$codModelo);
			$ObC = $QueryC->fetch_array();

			if($Query->num_rows > 0){
				
				while($Ob = $Query->fetch_array()){
					
					//verifico se o valor de todos os modelos é diferente do que 2 se for
					//verifico se o cod_modelo não está vazio se não estiver
					//verifico se o modelo que o usuario seleciono é o mesmo que está cadastrado se for exibo
					if($Ob['todos_modelos'] != '2' && !empty($Ob['cod_modelo']) && $Ob['cod_modelo'] == $codModelo ){
						echo "<option value=\"".$Ob['cod_opcional']."\">".utf8_encode($Ob['desc_opcional'])."</option>";
					}
					
					//verifico se o valor de todos os modelos é diferente do que 2 se for
					//verifico se o cod_marca não está vazio se não estiver
					//verifico se a marca que é a mesma que ele está cadastrado
					else if($Ob['todos_modelos'] != '2' && !empty($Ob['cod_marca']) && !empty($ObC['cod_marca']) && $Ob['cod_marca'] == $ObC['cod_marca'] ){
						echo "<option value=\"".$Ob['cod_opcional']."\">".utf8_encode($Ob['desc_opcional'])."</option>";
					}
					
					//verifico se a coluna todos_modelos possui o valor 2 ( todoos os modelos )
					//verifico se cod_modelo e cod_marca estão vazios
					else if($Ob['todos_modelos'] == '2' && empty($Ob['cod_marca']) && empty($Ob['cod_modelo'])){
						echo "<option value=\"".$Ob['cod_opcional']."\">".utf8_encode($Ob['desc_opcional'])."</option>";
					}
					
				}
					
			}else{
				echo "ERRO";
			}

Verifique se o código abaixo corresponde ao que você quer.

SELECT cod_opcional, desc_opcional FROM veic_opcional WHERE todos_modelos <> 2 AND cod_modelo = $codModelo
UNION
SELECT v.cod_opcional, v.desc_opcional FROM veic_opcional v
LEFT JOIN empresas_veiculos ev ev.cod_modelo = v.cod_modelo
WHERE v.todos_modelos <> 2 AND NOT ev.cod_marca IS NULL
UNION
SELECT cod_opcional, desc_opcional FROM veic_opcional WHERE todos_modelos = 2 AND cod_marca IS NULL
Pode melhorar o codigo para

SELECT cod_opcional, desc_opcional FROM veic_opcional WHERE todos_modelos <> 2 AND cod_modelo = $codModelo
UNION
SELECT v.cod_opcional, v.desc_opcional FROM veic_opcional v
INNER JOIN empresas_veiculos ev ev.cod_modelo = v.cod_modelo
WHERE v.todos_modelos <> 2 
UNION
SELECT cod_opcional, desc_opcional FROM veic_opcional WHERE todos_modelos = 2 AND cod_marca IS NULL
Nota. Não conheço PHP, mas consigo ler quase todo tipo de código. $codModelo fois a forma que encontrei para representar e exibir um parâmetro. Pode ser que você necessite de mais parâmetros. Se for o caso, eles devem ficar nas respectivas cláusulas WHERE
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...