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

select distinct


betolima

Pergunta

Estou usando combos com ajax, mas o problema nem é no ajax.

Preciso dar um select distinct numa tabela mas ele não aceita. Insiste em mostrar valores repetidos.

xml.php

<?php 

############## EDITAR #######################

$bd_host = 'localhost'; // host... 99,9% de chance de ser localhost..
$bd_name = 'banco'; //nome do banco de dados
$bd_user = 'root'; //nome do usuário
$bd_pass = ''; //senha do usuário

$tb1_nome = 'ajax_cidade'; //nome da tabela que contém os valores do select 1
$tb1_valor = 'id'; //campo da tabela que ficará no 'value' do option
$tb1_desc = 'texto'; //campo da tabela que ficará na descrição do option... a parte visível


$tb2_nome = 'ajax_bairro'; //nome da tabela que contém os valores do select 2
$tb2_valor = 'id'; //campo da tabela que ficará no 'value' do option
$tb2_desc = 'texto'; //campo da tabela que ficará na descrição do option... a parte visível
$tb2_comp = 'menuid'; //campo da tabela 2 para comparação com o value da select 1... 'WHERE' $tb_comp =

###############################################

$connection = @mysql_connect($bd_host, $bd_user, $bd_pass) or die("Unable to connect to database!");
@mysql_select_db($bd_name, $connection) or die("Unable to select database!");
    

$sql = " SELECT distinct $tb2_desc FROM $tb2_nome WHERE $tb2_comp = '$_POST[vsel1]' ";    

    
$sql = mysql_query($sql);      
$row = mysql_num_rows($sql);    

if($row) {                
   $xml  = "<?php xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
   $xml .= "<cidades>\n";              
   for($i=0; $i<$row; $i++) {  
      $codigo    = mysql_result($sql, $i, $tb2_valor);
      $descricao = mysql_result($sql, $i, $tb2_desc);
      $xml .= "<cidade>\n";    
      $xml .= "<codigo>".$codigo."</codigo>\n";                  
      $xml .= "<descricao>".ucfirst(strtolower($descricao))."</descricao>\n";        
      $xml .= "</cidade>\n";    
   }          
   $xml.= "</cidades>\n";
   Header("Content-type: application/xml; charset=iso-8859-1");
}                                              
  
echo $xml;        
?>
index.php
<?php 
require('xml.php');

?>
<script type="text/javascript" src="combo.js"></script>
<body onLoad="Dados(document.getElementById('select1').value);">
<?php 
$sql = "SELECT * FROM $tb1_nome";
$sql = mysql_query($sql);
$row = mysql_num_rows($sql);
?>
<form>
<select name="select1" id="select1" onChange="Dados(this.value);">
<?php  for($i=0; $i<$row; $i++) { ?>
<option value="<?php  echo mysql_result($sql, $i, $tb1_valor); ?>">
<?php  echo mysql_result($sql, $i, $tb1_desc); ?></option>
<?php  } ?>
</select><br>

<select name="select2" id="select2">
<option id="opcoes" value="0">Selecione a categoria</option>
</select>
</form>
combo.js
function Dados(valor) {
      try {
         ajax = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch(e) {
         try {
            ajax = new ActiveXObject("Msxml2.XMLHTTP");
         }
         catch(ex) {
            try {
               ajax = new XMLHttpRequest();
            }
            catch(exc) {
               alert("Esse browser não tem recursos para uso do Ajax");
               ajax = null;
            }
         }
      }
      if(ajax) {
         document.forms[0].select2.options.length = 1;
        
         idOpcao  = document.getElementById("opcoes");
        
         ajax.open("POST", "xml.php", true);
         ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        
         ajax.onreadystatechange = function() {
            if(ajax.readyState == 1) {
               idOpcao.innerHTML = "Carregando...";
            }
            if(ajax.readyState == 4 ) {
               if(ajax.responseXML) {
                  processXML(ajax.responseXML);
               }
               else {
                   idOpcao.innerHTML = "Selecione";
               }
            }
         }
         var params = "vsel1="+valor;
         ajax.send(params);
      }
   }
  
   function processXML(obj){
      var dataArray   = obj.getElementsByTagName("cidade");
      
      if(dataArray.length > 0) {
                   document.forms[0].select2.options.length = 0;
         for(var i = 0; i < dataArray.length; i++) {
            var item = dataArray[i];
            var codigo    =  item.getElementsByTagName("codigo")[0].firstChild.nodeValue;
            var descricao =  item.getElementsByTagName("descricao")[0].firstChild.nodeValue;
            

            var novo = document.createElement("option");
                novo.setAttribute("id", "opcoes");
                novo.value = codigo;
                novo.text  = descricao;
                document.forms[0].select2.options.add(novo);
         }
      }
      else {
        idOpcao.innerHTML = "Selecione";
      }      
   }
sql
CREATE TABLE `ajax_bairro` (
  `id` int(6) NOT NULL auto_increment,
  `menuid` int(6) NOT NULL,
  `texto` varchar(150) default NULL,
  `empresa` varchar(150) default NULL,
  `endereco` varchar(150) default NULL,
  `estado` varchar(3) default NULL,
  `cep` varchar(10) default NULL,
  `telefone1` varchar(13) default NULL,
  `telefone2` varchar(13) default NULL,
  `celular` varchar(13) default NULL,
  `email` varchar(100) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7;

-- 
-- Extraindo dados da tabela `ajax_bairro`
-- 

INSERT INTO `ajax_bairro` (`id`, `menuid`, `texto`, `empresa`, `endereco`, `estado`, `cep`, `telefone1`, `telefone2`, `celular`, `email`) VALUES 
(2, 4, 'Centro', '1', 'end', '1', 'cep', 'fone1', 'fone2', 'cel', 'email'),
(1, 4, 'Centro', '1', 'end2', '1', 'cep2', 'fone1 2', 'fone 2 2', 'cel2', 'email2');

-- --------------------------------------------------------

-- 
-- Estrutura da tabela `ajax_cidade`
-- 

CREATE TABLE `ajax_cidade` (
  `id` int(6) NOT NULL auto_increment,
  `texto` varchar(150) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

-- 
-- Extraindo dados da tabela `ajax_cidade`
-- 

INSERT INTO `ajax_cidade` (`id`, `texto`) VALUES 
(1, 'são leo'),
(2, 'são sepe'),
(3, 'canoas'),
(4, 'Esteio');

Se alguém souber como resolver essa questão do distinct agradeço. Creio que não estou fazendo errado o distinct.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'betolima'

É esta a sql com problema?

$sql = " SELECT distinct $tb2_desc FROM $tb2_nome WHERE $tb2_comp = '$_POST[vsel1]' ";
Se sim, há a possibilidade de em $tb2_desc haver mais de um campo? Em caso positivo, ele retornará somente uma linha para cada conjunto igual. Por exemplo: Se o conteúdo da tabela é: campo1 | campo2 aaaaaa | bbbbbb aaaaaa | bbbbbb aaaaaa | cccccc E eu faço um select assim:
select distinct campo1, campo2 from minhatabela

O retorno será 2 linhas assim:

aaaaaa | bbbbbb

aaaaaa | cccccc

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...