NunoDinis Posted March 27, 2013 at 09:51 AM Report #500553 Posted March 27, 2013 at 09:51 AM 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
Leonardo Pereira Posted March 27, 2013 at 10:37 AM Report #500557 Posted March 27, 2013 at 10:37 AM Boas Já experimentaste usar o DISTINCT ? Cumps
NunoDinis Posted March 27, 2013 at 10:48 AM Author Report #500559 Posted March 27, 2013 at 10:48 AM 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
brunoais Posted March 27, 2013 at 10:53 AM Report #500561 Posted March 27, 2013 at 10:53 AM 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%.
pikax Posted March 27, 2013 at 11:30 AM Report #500567 Posted March 27, 2013 at 11:30 AM 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."
brunoais Posted March 27, 2013 at 11:53 AM Report #500570 Posted March 27, 2013 at 11:53 AM 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%.
NunoDinis Posted March 27, 2013 at 12:09 PM Author Report #500571 Posted March 27, 2013 at 12:09 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now