Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NunoDinis

[Resolvido] Valores diferentes na dropdown

Mensagens Recomendadas

NunoDinis

Bom dia,

Tenho um select(dropdown) com este aspeto.

http://nunodinis.br22.com/teste.png

Consigo definir como selecionados os valores que guardo numa tabela da BD. Mas tenho o seguinte problema: Está-me a devolver valores duplicados.

Já tentei fazer algo como:

$sql2="SELECT * FROM app6_areas where id<>'O id que devolve'";

Se por acaso fosse uma dropdown apenas com a possibilidade de escolher um registo com esta query resolvia. Assim está mais complicado. Já tentei também armazenar

os ids num array para depois percorrer mas também não é solução.

O problema:

http://nunodinis.br22.com/teste2.png

O código que tenho.

$sql="SELECT  app6_contractos_areas.*, app6_areas.* from app6_contractos_areas, app6_areas where app6_areas.id=app6_contractos_areas.area_id and app6_contractos_areas.contrato_id='".$_GET['id']."'";
//$sql="SELECT * from app6_contractos_areas where contrato_id  = '".$_GET['id']."'";
$lista=mysql_query($sql);
while($liista=mysql_fetch_array($lista))
{
 echo "<option value=$liista[1] selected=\"selected\" >";
 echo $liista[3]." </option>";
}

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

1º Faz essa query em várias linhas, assim é mais fácil de ler. (podes usar newlines explícitas numa string em php)

2º Usa Join's de uma maneira explícita, não de uma maneira implícita.

3º Experimenta usar o "NOT IN" do SQL e, depois, indicar uma lista de id's que não queres que ele mostre.

Pode ser que isso ajude. Mas com uma query assim, não estruturada, é mais difícil de ler e perceber como deve ser.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

Esta' aqui um sql com Joins explicitos, para ser mais facil a compreencao:

SELECT  
app6_contractos_areas.*, 
app6_areas.* 
FROM app6_contractos_areas
	LEFT JOIN app6_areas ON app6_areas.id=app6_contractos_areas.area_id 
where app6_contractos_areas.contrato_id=?


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Hum... Então basta usar um

NOT IN

no WHERE aplicado a esse valor.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Obrigado @brunoais e @pikax.

Já está quase, só falta uma coisa.

http://nunodinis.br22.com/teste3.png

Se repararem já me diz as áreas que estão selecionadas e logo a seguir as que não estão (SG,OLF). Só que depois volta-me a listar as áreas.

/**LISTA VALORES SELECIONADOS**/
		  $sql="SELECT
		   app6_contractos_areas.*,
		   app6_areas.*
		   FROM app6_contractos_areas
			 LEFT JOIN app6_areas ON app6_areas.id=app6_contractos_areas.area_id
		   WHERE app6_contractos_areas.contrato_id='".$_GET['id']."'";

		  $lista=mysql_query($sql);
		  while($liista=mysql_fetch_array($lista))
		  {
			echo "<option value=$liista[1] selected=\"selected\" >";
			echo $liista[3]." </option>";
		  }
		  /**FIM LISTA VALORES SELECIONADOS**/

		  /**LISTA OS VALORES DIFERENTES DOS SELECIONADOS (TABELA APP6_CONTRACTOS_AREAS)**/
		  $sql="SELECT  * FROM  app6_areas
		  WHERE  NOT EXISTS
		  (SELECT  * FROM  app6_contractos_areas WHERE app6_areas.id=app6_contractos_areas.area_id)";
		  $lista2=mysql_query($sql);
		  while($liista2=mysql_fetch_array($lista2))
		  {
			echo "<option value=$liista2[0]>";
			echo $liista2[1]." </option>";
		  }
		  /**FIM LISTA OS VALORES DIFERENTES DOS SELECIONADOS (TABELA APP6_CONTRACTOS_AREAS)**/
 

Não sei se não estou a utilizar de forma desnecessária a 2ªquery. Em todo o caso, o problema parece-me aí.

My bad.. funciona perfeito. Obrigado! :)


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.