Jump to content


Photo

Consulta Mysql


  • Faça o login para participar
4 replies to this topic

#1 primo

primo

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado
  • Localidade:Telêmaco Borba - PR

Posted 02/06/2013, 00:35

Gostaria que a consulta retornasse apenas um resultado de cada. Vamos ver se eu consigo explicar.

O usuario só pode cadastrar como combustivel Gasolina ou Etanol. Gostaria de uma solução para consultar o bd onde, se o usuário usou ambos os combustíveis, o combo mostrasse os dois, mas se o usuário cadastrou só Etanol, por exemplo, o combobox mostrasse somente essa opção, para evitar buscas vazias.

Do jeito que eu fiz, mostra todos os resultados, se o usuário cadastrou 10 consumos, o combobox fica repetindo 10 vezes as opções Etano e Gasolina.

$sql = mysql_query("SELECT combustivel FROM consumo WHERE usuario = '$user'") or die (mysql_error());
						
	while($c = mysql_fetch_array($sql)){
	      echo "<option value=" .$c['combustivel'] . ">";
	      echo $c['combustivel'] . "</option>";
	}

Com essa consulta minha saída é:
<option value="Etanol">Etanol</option>
<option value="Etanol">Etanol</option>
<option value="Gasolina">Gasolina</option>
<option value="Etanol">Etanol</option>

...

Repetindo-se quantas linhas houver.

A saída que eu preciso é o seguinte:

<option value="Etanol">Etanol</option>
<option value="Gasolina">Gasolina</option>

Se os dois combustíveis foram cadastrados, ou apenas

<option value="Etanol">Etanol</option>

Caso ele tenha cadastrado consumo de apenas esse tipo de combustível.

Alguém pode me mostrar o caminho?
Muito obrigado,

#2 Victor Hugo Odo

Victor Hugo Odo

    Doutor

  • Administradores
  • 779 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:Compartilhar conhecimentos!

Posted 02/06/2013, 12:02

Nesse caso o correto seria você verificar se já está cadastrado e não permitir o usuário cadastrar a mesma coisa várias vezes. Até mesmo para evitar lixo no seu banco que pode tornar as consultas mais lentas e também te atrapalhar na mineração de dados. Fora que como você está adicionando em options, você pretende vincular alguma coisa ao combustível, certo? O vinculo será no ID, e não no label, então você tem vários IDs para o mesmo label.

Abs

Fórum WMO - Administrador


#3 primo

primo

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado
  • Localidade:Telêmaco Borba - PR

Posted 04/06/2013, 19:18

Nesse caso o correto seria você verificar se já está cadastrado e não permitir o usuário cadastrar a mesma coisa várias vezes. Até mesmo para evitar lixo no seu banco que pode tornar as consultas mais lentas e também te atrapalhar na mineração de dados. Fora que como você está adicionando em options, você pretende vincular alguma coisa ao combustível, certo? O vinculo será no ID, e não no label, então você tem vários IDs para o mesmo label.

Abs


Na verdade as únicas opções possíveis são Gasolina e Etanol por validação, e o usuário pode cadastrar quantos consumos de combustivel ele quiser, por isso eu tenho varias linhas com Gasolina e Etanol. (Além do combustível eu tenho outras variáveis, como trajeto, motor, etc...)

O que eu quero fazer é o seguinte: uma sequencia de combos as quais o usuario vai selecionar pra filtrar sua busca na tabela. Sabe quando a gente cria filtros no excel? é o que eu preciso.

Num desses combos, eu preciso das opções de combustível que o usuário cadastrou, ou Gasolina, ou Etanol, ou ambos. Eu poderia simplesmente fazer isso em html puro, porém se o usuário não usou Gasolina nenhuma vez, essa opção vai estar sobrando no combobox, e se for selecionada vai gerar uma busca vazia. É por isso que eu gostaria de exibir neste combo apenas o tipo de combustível que o usuário cadastrou. Aí é que não estou conseguindo realizar a consulta pra exibir apenas um resultado de cada.

Se o usuário usou Gasolina três vezes, minha consulta está gerando três <option>Gasolina</option> como valor, quando eu preciso de apenas um. Queria saber como faz essa consulta para gerar apenas um valor caso haja mais de um no banco.

A imagem vai exemplificar melhor o que eu preciso:

Posted Image

Como o usuário cadastrou seu consumo em Etanol, eu gostaria de exibir apenas "Etanol" no combo, já que a opção Gasolina seria irrelevante.

Edição feita por: primo, 04/06/2013, 19:19.


#4 Victor Hugo Odo

Victor Hugo Odo

    Doutor

  • Administradores
  • 779 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:Compartilhar conhecimentos!

Posted 04/06/2013, 21:08

Entendi,

Nesse caso, talvez seria interessante você ter uma tabela com os tipos de combustíveis (no caso Etanol e Gasolina), e conforme o usuário cadastra, você cria os vínculos baseados no ID (seja 1:N ou N:N), assim vc evita consumo de banco e centraliza os combustíveis.

De qualquer forma, o que vc precisa fazer é usar a mesma consulta que usou no primeiro post, basta adicionar ao final da query um group by vinculando o campo de combustível assim ele agrupa por dados idênticos:

$sql = mysql_query("SELECT combustivel FROM consumo WHERE usuario = '" . $user  . "' GROUP BY combustivel")

Espero ter ajudado.

Abs

Post movido para Fórum de MySQL.

Fórum WMO - Administrador


#5 primo

primo

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado
  • Localidade:Telêmaco Borba - PR

Posted 04/06/2013, 23:36

Entendi,

Nesse caso, talvez seria interessante você ter uma tabela com os tipos de combustíveis (no caso Etanol e Gasolina), e conforme o usuário cadastra, você cria os vínculos baseados no ID (seja 1:N ou N:N), assim vc evita consumo de banco e centraliza os combustíveis.

De qualquer forma, o que vc precisa fazer é usar a mesma consulta que usou no primeiro post, basta adicionar ao final da query um group by vinculando o campo de combustível assim ele agrupa por dados idênticos:

$sql = mysql_query("SELECT combustivel FROM consumo WHERE usuario = '" . $user  . "' GROUP BY combustivel")

Espero ter ajudado.

Abs

Post movido para Fórum de MySQL.


Verdade cara, às vezes dá um branco. Basta colocar GROUP BY. Valeu, obrigado por esclarecer.

Quanto ao relacionamento de tabelas, é uma opção realmente bem melhor, mas acho que vou deixar assim porque senão eu posso complicar as coisa se algo der errado na manipulação das tabelas e dados.
Nos próximos trabalhos não vou esquecer disso, aliás, vou antes modelar os use cases pra depois pensar no sistema. Fazer as coisas nas coxas é isso que dá.
Mais uma vez obrigado.
Abraço,




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq