Фильтр по буквам

Тема в разделе "Как сделать...", создана пользователем Sunday, 27 фев 2012.

  1. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    766
    Симпатии:
    326
    Имеется sql-запрос на вывод имён.
    Требуется сделать фильтр по буквам. Т.е. жмякнули на А - получили все имена на А.
    Я знаю, как по-нубски сделать, типа так:
    Код:
    if (isset($_GET['A'])) $a = 'условие для запроса';
    elseif (isset($_GET['B'])) $b = 'условие для запроса';
     
    ...
    
    И так для каждой буквы.

    Подскажите, есть ли какой-то более изящный способ решить этот вопрос, чтобы не городить больше 20-ти условий?
     
  2. DemanZ

    DemanZ Постоялец

    Регистр.:
    16 мар 2007
    Сообщения:
    144
    Симпатии:
    113
    не знаю для чего делать каждую букву?
    Код:
    if (isset($_GET['A'])) $a = 'условие для запроса';
    elseif (isset($_GET['B'])) $b = 'условие для запроса';
    можно к примеру:
    Код:
    if ($_REQUEST['letter'] != '')
    {
        $where_sql = ' WHERE name LIKE \''.mysqli_real_escape_string(trim($_REQUEST['letter'])).'%\' ';
    }
    так же можно сделать цикл из букв (их вывода...) если нужно:
    Код:
    for($k=ord('A');$k<=ord('Z');$k++){
        $lit = chr($k);
        if ($lit == 'Z') $razd = '';
        else $razd = '|';
        if ($_REQUEST['letter'] == $lit)
            $nav_en_letter .= '&nbsp;<strong style="color:#008000">'.$lit.'</strong>&nbsp;'.$razd;
        else
            $nav_en_letter .= '&nbsp;<a href="'.$http.'?do=allusers&letter='.$lit.'">'.$lit.'</a>&nbsp;'.$razd;
    }
    for($k=ord('А');$k<=ord('Я');$k++){
        $lit = chr($k);
        if ($lit == 'Я') $razd = '';
        else $razd = '|';
        if ($_REQUEST['letter'] == $lit)
            $nav_ru_letter .= '&nbsp;<strong style="color:#008000">'.$lit.'</strong>&nbsp;'.$razd;
        else
            $nav_ru_letter .= '&nbsp;<a href="'.$http.'?do=allusers&letter='.$lit.'">'.$lit.'</a>&nbsp;'.$razd;
    }
    
     
    Sunday нравится это.
  3. DemanZ

    DemanZ Постоялец

    Регистр.:
    16 мар 2007
    Сообщения:
    144
    Симпатии:
    113
    Мой модуль на DLE - Allusers (делал там вывод по буквам, поиск по имени),если нужно могу скинуть... может ещё что интересного найдёшь... :)
     
  4. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    766
    Симпатии:
    326
    Я сделал по такому принципу
    Всё вроде норм, но список почему-то не ограничивается только именами на заданную букву. Т.е. сначала выводятся все нужные имена, а затем все остальные.

    Как отсечь остальные в этом случае?
     
  5. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.422
    Следующий код выведет все записи, что начинаются на букву а и ничего другого. Смотрите свой полный запрос, что идет в базу и сравнивайте.
    Код:
    SELECT * FROM `table` WHERE `name` LIKE 'a%'
     
    Sunday нравится это.
  6. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    766
    Симпатии:
    326
    Спасибо, все верно, у меня тут видимо косяк какой-то...

    Подскажите, как-то можно сформировать список ссылок с нужными адресами и анкорами, исходя из этого?
    Код:
    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');
    или просто вручную сделать этот список?
     
  7. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    766
    Симпатии:
    326
    Нужно, хочу посмотреть, как организован вывод окончательный. Мне кое-какие детали не ясны до конца.
    Вдобавок у меня на сайте utf и ваш вариант с ord() и chr() не могу привести в рабочее состояние...
     
  8. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    Что мешает в foreach перебрать этот массив и сформировать нужные URL?
    Типа такого:
    PHP:
    $Letters = 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');
    foreach (
    $Letters as $letter) {
        echo 
    '<a href="/getnames.php?letter='.$letter.'">'.$letter.'</a>';   
    }
     
    Sunday нравится это.
  9. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    766
    Симпатии:
    326
    У меня на сайте UTF и проблемы с некоторыми русскими буквами.
    Прописал в htaccess правило и ссылка выглядит так:
    Код:
    <a href="http://domen.ru/users-'.utf8_strtolower($letter).'.html">'.$letter.'</a>
    есть функция utf8_strtolower для нижнего регистра. Но некоторые буквы коряво передаются и в итоге имеем Not Found
    Как это победить?

    UPD

    мануалы рулят
     
  10. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    766
    Симпатии:
    326
    Подскажите пожалуйста, что нужно подставить в запрос, чтобы выборка была только по цифрам 0-9 и в порядке убывания?

    И почему буква Ё не дружит с urlencode?