Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NunoDinis

[Resolvido] Valores diferentes na dropdown

Recommended Posts

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

Share this post


Link to post
Share on other sites
NunoDinis

Olá,

Não se aplica, porque não existem valores repetidos na tabela.


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

ndsotware.org

Share this post


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

Share this post


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

Share this post


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

Share this post


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

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

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.