За последние 24 часа нас посетили 8246 программистов и 477 роботов. Сейчас ищут 279 программистов ...

сортировка записей из базы данных (MySQL)

Тема в разделе "PHP для профи", создана пользователем Ruslanpro, 5 дек 2018.

Метки:
  1. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    Использую этот код
    HTML:
    1. <?php
    2.  
    3.    $lastChar = "А";
    4.  
    5. ?>
    6.    
    7. <?php
    8.  
    9.    foreach ($conndb->query($sql) as $row):
    10.    
    11. ?>
    12.  
    13. <?php if ($lastChar !== ($currentChar = mb_convert_case(mb_substr($row['category_name'], 0, 1), CASE_UPPER))): ?>
    14. <?php $lastChar = $currentChar; ?>
    15. [html]<h1 class="bukva" id="bukva_<?= mb_convert_case($lastChar, CASE_LOWER); ?>"><?= $lastChar; ?>
    </h1>
    <?php endif; ?>

    <a href="http://localhost/menu_general/masters_page/masters/masters.php">



    <div class="kategoriya">
    <div class="kolichestvo">0</div>
    <?php echo $row['category_name'] . "\t"; ?>
    </div>

    </a>

    <?php

    endforeach;

    ?>[/html]
    для сортировки записей из базы данных по алфавиту

    В базе два поля id , category_name
    В category_name название категорий:
    алмазная резка
    автоматика
    водопровод
    архитектура
    гиодезия
    барельеф
    бетонные работы
    вентиляция
    витражи
    бурение скважин
    и т.д.

    так чтобы если в базе есть запись начинающаяся на букву "З"(или любую другую букву)
    то в коде
    HTML:
    1. <h1 class="bukva" id="bukva_<?= mb_convert_case($lastChar, CASE_LOWER); ?>"><?= $lastChar; ?></h1>
    должна вставиться эта буква и так по всем записям
    Но у меня вместо буквы, выходит на весь список только один вопросительны знак в ромбе

    посоветовали включить модуль [mbstring]
    вроде включил но не помогает
    Подскажите как решить эту задачу
     

    Вложения:

    • Image 7.png
      Image 7.png
      Размер файла:
      240,9 КБ
      Просмотров:
      7
  2. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    решил задачу
    надо включить модуль mbstring
    с английскими буквами работает корректно без включения модуля mbstring
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.052
    Симпатии:
    1.725
    Адрес:
    :сердА
    Для сортировки записей из базы данных по алфавиту, указывайте базе данных, что результат запроса надо вернуть отсортированными по алфавиту...
     
  4. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    код выше рабочий только с русскими символами без включения модуля mbstring не работает
    --- Добавлено ---
    не могу найти в openserver`е файл php.ini
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.052
    Симпатии:
    1.725
    Адрес:
    :сердА
    Бро, а при чем тут вообще сортировка, когда у тебя задача - первую букву вывести большую?
    Все смешалось, люди, кони.
     
  6. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    не могу найти в openserver`е файл
    как сделать так чтобы первая буква была большой?
    --- Добавлено ---
    В этом коде походу много чего надо изменить
    1 Чтобы буква в коде
    HTML:
    1. <h1 class="bukva" id="bukva_<?= mb_convert_case($lastChar, CASE_LOWER); ?>"><?= $lastChar; ?></h1>
    была заглавной
    2 Чтобы в id теге <h1> ставилась английская буква маленькая
    --- Добавлено ---
    HTML:
    1. <h1 class="bukva" id="bukva_<?= $lastChar; ?>"><?= mb_convert_case($lastChar, CASE_LOWER); ?></h1>
    решил проблему с заглавными буквами просто переставил местами
    --- Добавлено ---
    еще один вопрос
    Как сделать так чтобы в id вставилась английская буква маленькая
    А между тегами <h1></h1> вставилась русская буква большая

    id используется как якорь


    HTML:
    1. <a href="#bukva_a" class="yakor_a"><h1 class="yakor_h1">А</h1></a>
    2. <a href="#bukva_b" class="yakor_a"><h1 class="yakor_h1">Б</h1></a>
    3. <a href="#bukva_v" class="yakor_a"><h1 class="yakor_h1">В</h1></a>
    4. <a href="#bukva_g" class="yakor_a"><h1 class="yakor_h1">Г</h1></a>
    5. <a href="#bukva_d" class="yakor_a"><h1 class="yakor_h1">Д</h1></a>
    6. <a href="#bukva_e" class="yakor_a"><h1 class="yakor_h1">Е</h1></a>
    7. <a href="#bukva_j" class="yakor_a"><h1 class="yakor_h1">Ж</h1></a>
    8. <a href="#bukva_z" class="yakor_a"><h1 class="yakor_h1">З</h1></a>
    9. <a href="#bukva_i" class="yakor_a"><h1 class="yakor_h1">И</h1></a>
    10. <a href="#bukva_k" class="yakor_a"><h1 class="yakor_h1">К</h1></a>
    11. <a href="#bukva_l" class="yakor_a"><h1 class="yakor_h1">Л</h1></a>
    12. <a href="#bukva_m" class="yakor_a"><h1 class="yakor_h1">М</h1></a>
    13. <a href="#bukva_n" class="yakor_a"><h1 class="yakor_h1">Н</h1></a>
    14. <a href="#bukva_o" class="yakor_a"><h1 class="yakor_h1">О</h1></a>
    15. <a href="#bukva_p" class="yakor_a"><h1 class="yakor_h1">П</h1></a>
    16. <a href="#bukva_r" class="yakor_a"><h1 class="yakor_h1">Р</h1></a>
    17. <a href="#bukva_s" class="yakor_a"><h1 class="yakor_h1">С</h1></a>
    18. <a href="#bukva_t" class="yakor_a"><h1 class="yakor_h1">Т</h1></a>
    19. <a href="#bukva_u" class="yakor_a"><h1 class="yakor_h1">У</h1></a>
    20. <a href="#bukva_f" class="yakor_a"><h1 class="yakor_h1">Ф</h1></a>
    21. <a href="#bukva_h" class="yakor_a"><h1 class="yakor_h1">Х</h1></a>
    22. <a href="#bukva_c" class="yakor_a"><h1 class="yakor_h1">Ц</h1></a>
    23. <a href="#bukva_ch" class="yakor_a"><h1 class="yakor_h1">Ч</h1></a>
    24. <a href="#bukva_sh" class="yakor_a"><h1 class="yakor_h1">Ш</h1></a>
    25. <a href="#bukva_uh" class="yakor_a"><h1 class="yakor_h1">Э</h1></a>
    26. <a href="#bukva_yu" class="yakor_a"><h1 class="yakor_h1">Ю</h1></a>
    27. <a href="#bukva_ya" class="yakor_a"><h1 class="yakor_h1">Я</h1></a>
     
  7. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    321
    Симпатии:
    39
    У тебя щас, бомбанёт. Если тебе первый символ в кириллице нужно вывести, то да mbstring тебе нужно включить. Но ты его включишь, но тебе нужно будет задействовать:
    - Конкатенацию
    - mb_substr от 0 до 1
    - mb_strtoupper
    - mb_strtolower

    Либо это дело в функцию завернуть, ну либо нет
     
    Ruslanpro нравится это.
  8. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    @villiwalla а для чего конкатенация? чтобы объединить буквы в id?
     
  9. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    321
    Симпатии:
    39
    Ну я пока писал, ты уже там сообщение наизменял )) Если конкретно к этой фразе, что бы первая буква была большой, то да надо конкатенацию, если же нужно чтобы одна единственная буква была большой, то хватит mb_strtoupper да и то лишнее, проще на фронте сделать её большой через css.
     
    Ruslanpro нравится это.
  10. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    @villiwalla как быть с последним вопросом?
     
  11. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    321
    Симпатии:
    39
    С каким конкретно? Я что-то его упустил
     
    Ruslanpro нравится это.
  12. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    @villiwalla
    тут дело в том что русские буквы в теге <h1> надо заменить на английские в id
    Например
    HTML:
    1. <h1 class="bukva" id="bukva_uh">Э</h1>
     
  13. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    321
    Симпатии:
    39
    PHP:
    1. function replaceSymbolRuToLat($symbol) {
    2.   $symbolsRu = [
    3.     'a' => 'a',
    4.     'з' => 'z',
    5. ......
    6.   ];
    7.  
    8.  $symbol = mb_strtolower($symbol);
    9.  
    10.   return $symbolsRu[$symbol];
    11. }
    HTML:
    1. <h1 class="bukva" id="<?= replaceSymbolRuToLat('Э') ?>">Э</h1>
     
    Ruslanpro нравится это.
  14. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    @villiwalla ее можно объединить с предыдущем кодом
    HTML:
    1. <h1 class="bukva" id="bukva_<?= $lastChar; ?>"><?= mb_convert_case($lastChar, CASE_LOWER); ?></h1>
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.052
    Симпатии:
    1.725
    Адрес:
    :сердА
    Чувак, убери надпись "Pro" из подписи. Не по званию погоны...
     
  16. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    Ты что тут всезнайка ?
     
  17. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    4.967
    Симпатии:
    799
    Адрес:
    Лень
    @Ruslanpro, как пальцем в небо... и попал в точку !
     
  18. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    1.666
    Симпатии:
    124
    и зачем всё заново делать, когда уже была половина проекта сделана
     
  19. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    321
    Симпатии:
    39
    можно
     
    Ruslanpro нравится это.
  20. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    @Dimon2x если была половина проекта можно было и дизайн сделать который я нарисовал а там дальше уже со временем можно и специалистов подключить. Те файлы которые вы загрузили я их скопировал
     
  21. MRSgiba

    MRSgiba Новичок

    С нами с:
    22 дек 2017
    Сообщения:
    137
    Симпатии:
    22
    @Ruslanpro А потом на главной появляется "25 подразделений и 25 компонентов гугл карт, и js-script, который меняет z-index чтобы была видна карта тыкнутого подразделения", это я к тому, что торопиться в нашем деле не стоит, надо четко понимать задачу и далеко не всегда первое решение будет правильным. А если честно-то изобретаешь какой-то многоколесный велосипед, тут всяко проще решить через CSS и классы, если ситуация такая как на image-7-png. Ты что хочешь в итоге получить?
     
  22. Ruslanpro

    Ruslanpro Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    148
    Симпатии:
    6
    @MRSgiba мне нужна страница со списком категорий разделенный буквами
    Например под буквой А все названия категорий начинающиеся на А и так по алфавиту.

    Название категорий будут добавляться через форму.

    Заходит зарегистрированный мастер на страницу со списком категорий (или в своем профиле где он может выставить свой профиль под нужную ему категорию) не находит подходящую под его специальность категорию может отправить через форму название категории чтобы добавили в список после одобрения модератором запись добавляется в базу-->выводится в списке категорий
     
  23. MRSgiba

    MRSgiba Новичок

    С нами с:
    22 дек 2017
    Сообщения:
    137
    Симпатии:
    22
    @Ruslanpro Ну так и делай как ты написал:
    Так ты хочешь? https://codepen.io/anon/pen/bQXrxq
    Ну в твоем случае ЦСС немного надо поправить, вдруг на какие-то буквЫ не будет категорий, ну там сам разберешься ты же ПРО
    P.S. уже подправил
     
    #23 MRSgiba, 6 дек 2018
    Последнее редактирование: 6 дек 2018
  24. Valick

    Valick Новичок

    С нами с:
    12 авг 2018
    Сообщения:
    442
    Симпатии:
    84
  25. MRSgiba

    MRSgiba Новичок

    С нами с:
    22 дек 2017
    Сообщения:
    137
    Симпатии:
    22
    @Ruslanpro можно и на php решить. Дабы старожилы не закидали шапками по поводу ключей - русских букв. Создай ассоциативный массив из букв вида ['0'=>['А'], .. , '32'=>['Я']] получив результат из базы добавляй в этот массив все категории потом печатай.