- Como Criar Um Site, Blog – WebMaster.pt - http://www.webmaster.pt -

Listagem Ordenada Por Letra com PHP E MySQL

Tweet [3]

Letras exemplificando como fazer listagem por letra com PHP e MySQL.

É bastante comum em determinados tipos de sites e/ou sistemas virtuais ser necessário apresentar listagens de elementos em determinada tabela do banco de dados. Mas muitas pessoas se perguntam como fazer listas por letra a partir do BD. Na verdade, não há muito “mistério” e o segredo está em realizar uma query relativamente simples.

Vamos supor que temos uma tabela no banco de dados. Essa tabela “cidade” guarda informações sobre todas as cidades de um determinado país. Então, em um site fictício, é preciso que se faça uma listagem de todas essas cidades, mas, como são muitas, uma divisão por letra se faz conveninente. Algo como:

E assim por diante.

Técnica do Array

Muitos preferem usar a técnica do array, que, basicamente, consiste em montar um array com todas as letras do alfabeto e, num loop qualquer, realizar as queries para listar todas as cidades que começam com aquela letra.


$letras = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');

É possível trabalhar desse jeito, sim, mas, para casos em que existam letras de outros idiomas, por exemplo, não seria possível codificar sem saber, de antemão, quais seriam estes caracteres. Além disso, montar este array é mais trabalhoso que deixar os próprios PHP+MySQL trabalharem por nós. ;-)

Fazendo da maneira certa

O mais “correto”, para este caso, é realizar uma query para saber quais as letras existentes no BD e, a partir daí, trabalhar com as respectivas listagens. A query é:


$query_letras = mysql_query
('
  SELECT DISTINCT LEFT(descricao_cidade, 1) AS inicial
  FROM cidades
  ORDER BY descricao_cidade
');

Então, montaríamos um array com os resultados:


while($letra = mysql_fetch_object($query_letras))
{
  $letras[] = $letra->inicial;
}

E, a partir disso, poderíamos fazer uma lista composta da seguinte maneira:


foreach($letras AS $letra)
{
  echo '<h3>' . $letra . '</h3>';
          
  $cidades = mysql_query
  ('
    SELECT id, desc
    FROM cidades
      WHERE desc LIKE "' . $letra . '%"
    ORDER BY desc
  ');

  echo '<ul>';
    while ($c = mysql_fetch_object($cidades))
    {
      echo '<li>' . $c->desc . '</li>';
    }
  echo '</ul>';
}

O código completo para a solução:


$query_letras = mysql_query
('
  SELECT DISTINCT LEFT(descricao_cidade, 1) AS inicial
  FROM cidades
  ORDER BY descricao_cidade
');
while($letra = mysql_fetch_object($query_letras))
{
  $letras[] = $letra->inicial;
}

foreach($letras AS $letra)
{
  echo '<h3>' . $letra . '</h3>';
          
  $cidades = mysql_query
  ('
    SELECT desc
    FROM cidades
      WHERE desc LIKE "' . $letra . '%"
    ORDER BY desc
  ');

  echo '<ul>';
    while ($c = mysql_fetch_object($cidades))
    {
      echo '<li>' . $c->desc . '</li>';
    }
  echo '</ul>';
}

Conclusão

Como citado, é muito comum desenvolvedores precisarem fazer listagens por letras e não saberem bem como. Usando a “query-base” apresentada, é possível saber, de antemão, quais serão as letras que comporão a lista e, com isso, ter mais segurança no trabalho que se está fazendo e apresentar um resultado mais fiel ao BD para os visitantes.

Portanto, esta é a maneira correta de se fazer listas por letra usando PHP e MySQL.

Tweet [3]
Be Sociable, Share!
  • [4]
  • [5]
  • [6]
  • [7]
  • [8]