Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сделать алфавитную навигацию?
 
 автор: FatBoy   (09.11.2005 в 20:43)   письмо автору
 
 

Интересный вопрос возник, а так как я всего неделю разбираюсь в МуСКУЛе,
то решил спросить:

У меня есть база (в принципе не суть важно с чем). Возьмем к примеру поле:
fruits:
...
ананасы
бананы
киви
мандарины
апельсины
яблоки
ананасы
виноград
...

как сделать, чтобы получить алфавитные ссылки:
[url]А[/url] [url]Б[/url] В Г ... [url]Я[/url]
но ссылками были бы только те буквы, с которых начинается хотя бы
одно название в поле fruits? Причем как в примере фрукты могут идти
не по-порядку, а в разброс и повторяться несколько раз. А ссылки получались
бы вида:
<a href=page.php?bukva=А> А </a>
...
<a href=page.php?bukva=Я> Я </a>
А остальные буквы присутствовали бы по алфавиту, но ссылками не были.

   
 
 автор: cheops   (09.11.2005 в 23:36)   письмо автору
 
   для: FatBoy   (09.11.2005 в 20:43)
 

Извлечь первые буквы записей и сгруппировать их можно при помощи запроса
SELECT MID(fruits,1,1) AS fruits FROM tbl
GROUP BY fruits ORDER BY fruits

остаётся только вывести результаты запроса в цикле.

   
 
 автор: FatBoy   (10.11.2005 в 12:58)   письмо автору
 
   для: cheops   (09.11.2005 в 23:36)
 

Ну вот так и знал, что весь огород в 2 строки. Но вопрос, вернее 2:

1 как сделать все буквы ЗАГЛАВНЫЕ?
2 как в PHP вывести результат этого запроса? (я проверял запрос в MyAdmin)

   
 
 автор: Xman   (10.11.2005 в 13:22)
 
   для: FatBoy   (10.11.2005 в 12:58)
 

1 strtoupper($string)

   
 
 автор: cheops   (10.11.2005 в 13:27)   письмо автору
 
   для: FatBoy   (10.11.2005 в 12:58)
 

Заглавными буквы лучше сделать уже средствами PHP при помощи функции strtoupper(). А вывести результаты можно при помощи следующего кода
<?php
  
// Устанавливаем содинение с базой данных
  
include "config.php";
  
// Формируем SQL-запрос
  
$query "SELECT MID(fruits,1,1) AS fruits FROM tbl 
                 GROUP BY fruits ORDER BY fruits"
;
  
// Выполняем запрос
  
$frt mysql_query($query);
  if(!
$frt) exit(mysql_error());
  
// Если возвращается хотя бы одна запис - выводим
  // результаты в цикле
  
if(mysql_num_rows($frt) > 0)
  {
     while(
$fruits mysql_fetch_array($frt))
     {
        
$bukva urlencode(strtoupper($fruitsp['fruits']));
        echo 
"<a href=page.php?bukva=$bukva>$bukva</a>";
     }
  }
?>

Для установки соединения с базой данных используется файл config.php, посмотреть содержимое которого можно в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=3803

   
 
 автор: FatBoy   (11.11.2005 в 15:28)   письмо автору
 
   для: cheops   (10.11.2005 в 13:27)
 

Вот спасибо!
но по мне так уж лучше:


        $bukva = strtoupper($fruits['rubrika']); 
        echo "<a href=page.php?bukva=".urlencode($bukva).">$bukva</a> "; 


А все-таки не получиться сделать что-бы были все буквы алфавита?
типа:


$alfavit="АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
for ($k=0; $k<32; $k++)
{
ЕСЛИ БУКВА $alfavit[$k] ЕСТЬ В ЗАПРОСЕ, то выводим
        echo "<a href=page.php?bukva=".urlencode($bukva).">$bukva</a> "; 
    иначе выводим только echo"$alfavit[$k]";
}

   
 
 автор: cheops   (11.11.2005 в 15:49)   письмо автору
 
   для: FatBoy   (11.11.2005 в 15:28)
 

Можно... но для этого лучше извлечь сначала все буквы в массив
<?php 
  
// Устанавливаем содинение с базой данных 
  
include "config.php"
  
// Формируем SQL-запрос 
  
$query "SELECT MID(fruits,1,1) AS fruits FROM tbl 
                 GROUP BY fruits ORDER BY fruits"

  
// Выполняем запрос 
  
$frt mysql_query($query); 
  if(!
$frt) exit(mysql_error()); 
  
// Если возвращается хотя бы одна запис - выводим 
  // результаты в цикле 
  
if(mysql_num_rows($frt) > 0
  { 
     while(
$fruits mysql_fetch_array($frt)) 
     { 
        
$bukva[] = urlencode(strtoupper($fruitsp['fruits'])); 
     } 
  } 
?>

А затем проверять наличие букв в массиве $bukva
<?php
$alfavit
="АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ"
for (
$k=0$k<32$k++) 

  if(
in_array($alfavit[$k],$bukva)  echo "<a href=page.php?bukva=".urlencode($bukva).">".$alfavit[$k]."</a> "
  else echo 
$alfavit[$k]; 
}
?>

   
 
 автор: FatBoy   (14.11.2005 в 08:32)   письмо автору
 
   для: cheops   (11.11.2005 в 15:49)
 

Спасибо, после доработок все заработало.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования