Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135

Нужно отсортировать данные из БД

11.07.2015, 21:05. Показов 1214. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как "отсортировать" данные из БД.
Есть select, в него загружаются данные из БД.
Загружаю в optgroup(категории)
и в option Загружаю сам список в услуг.
Задача состоит в том, чтобы было возможным помещать конкретную услугу в конкретный optgroup.

Грубо говоря есть список услуг 100 штук, и нужно какие-то загружать в какую-либо категорию, категорий также много.

Может быть примеры есть где-нибудь?

Наглядный пример на картинке. Есть категория "official tools credits" и в нее загруются 3 услуги. дальше идет другая категория и в ней другие услуги.

Не могу уже долго найти решение


Наглядный пример
HTML5
1
2
3
4
5
6
<optgroup label="Игры"</optgroup>
<option  >Игра 1 </option>
<option  >Игра 2 </option>
<optgroup label="Книги"</optgroup>
<option  >услуга 1 </option>
<option  >услуга 2 </option>
итд.. только данные берутся из БД. Задача повторю заключается в том, чтобы я в любой момент мог добавить в базу новую услугу и она появлялась в нужной мне категории, например хочу услугу 1 поместить в категорию Игры. Думаю суть ясна.


Вот что я уже делал:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<select id="selects">
  <option  selected="selected">Выбрать</option>
<?php 
$CONNECT = mysqli_connect(HOST, USER, PASS, DB);
$Service = mysqli_query($CONNECT, "SELECT * FROM `oc_service`");
$Group = mysqli_query($CONNECT, "SELECT * FROM `oc_service_group`");
while($service = mysqli_fetch_assoc($Service)) {
    while($group = mysqli_fetch_assoc($Group)) {
    echo '<optgroup id='.$group['id'].' label='.$group['name'].'>      </optgroup>';
    }
    echo '<option >'.$service['name'].'<option/>';
}
?>
</select>
все слишком муторно, и я просто не вижу возможности добиться нужного мне результата вывел список.. а дальше не знаю что. Сейчас просто сделал чтобы они отдельно друг от друга загружались.

Если кто-нибудь может пример скинуть, то пожалуйста скиньте..
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.07.2015, 21:05
Ответы с готовыми решениями:

Нужно отсортировать данные по алфавиту
Нужно вводить данные о сотруднике(улицу,дом,квартиру), а потом как я понял нужно сортировать эти улицы по алфавиту... Код у меня есть,...

Данные в List, как csv. Нужно отсортировать
Всем привет. Сразу прошу прощения за возможный плохой код. Я начинающий. Вопрос такой. Есть List, в нем есть данные через...

Нужно отсортировать правильно данные в ячейках от большего к меньшему по типу
нужен макрос для обработки столбца в таблице. Поставщик даёт состов товара. нужно отсортировтаь правильно данные в ячейках от...

7
Заблокирован
12.07.2015, 00:58
Я вам уже написала, как сделать вывод списка за один цикл:
Select [Категории] и [под категории]

Отдельным циклом можете считать список категорий для получения их названий, либо просто хранить названия категорий в готовом массиве, в котором индексы элементов совпадают с идентификаторами категорий.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
12.07.2015, 02:43  [ТС]
Да, я из той темы ничего не понял, слишком умно объясняете.. я не так уж силен в php и запросах в базу.


начнем с того, что
Цитата Сообщение от Июнь Посмотреть сообщение
, как сделать вывод списка за один цикл:
$Service = mysqli_query($CONNECT, "SELECT * FROM `oc_service` ORDER BY `group`");

т.е мне нужен такой запрос?

Кажется немного начал понимать, но все равно еще до конца не понял.
Если я правильно двинулся с этим запросом подскажите, что дальше стоит делать? или скажите что я опять не вкурил и сидеть дальше размышлять нужно)

Добавлено через 1 час 7 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
$CONNECT = mysqli_connect(HOST, USER, PASS, DB);
$Service = mysqli_query($CONNECT, "SELECT * FROM `oc_service` ORDER BY `group`");
$Group = mysqli_query($CONNECT, "SELECT * FROM `oc_service_group` ORDER BY `group`");
 while($group = mysqli_fetch_assoc($Group) and $service = mysqli_fetch_assoc($Service)) {
   echo '<optgroup label='.$group['name'].'></optgroup>';
 
        if ($service['group'] == $group['group']) {
        echo '    <option >'.$service['name'].'<option/>      ';
        }
        else {
 
        }
    
}
?>
Сделал вот так, вроде бы что-то работает, но дело в том, что он находит первое совпадение и считает что все, хватит на этом, как зациклить ?

Пробовал что-то через do while но не получилось.. подскажите, правильно ли я сделал?
0
Заблокирован
12.07.2015, 10:41
Лучший ответ Сообщение было отмечено Admiral2014 как решение

Решение

Цитата Сообщение от Admiral2014 Посмотреть сообщение
Да, я из той темы ничего не понял, слишком умно объясняете.. я не так уж силен в php и запросах в базу.
Совсем не сильны, иначе бы поняли

Цитата Сообщение от Admiral2014 Посмотреть сообщение
т.е мне нужен такой запрос?
Примерно так. Я вам писала концовку запроса:
SQL
1
... ORDER BY `cat_id`,`name`
Тут помимо сортировки по категории еще указана сортировка по названию услуги в каждой категории, но это в общем-то необязательно.

Я вам на наглядном примере показала, что после такой сортировки нужно вставлять название категории при появлении нового идентификатора категории в соответствующем поле таблицы. Для этого достаточно отслеживать текущую категорию, т.е. когда появляется новое (отличное от текущего) значение идентификатора категории, менять текущее значение на новое:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if ($res=mysqli_query($CONNECT,'SELECT * FROM `oc_service` ORDER BY `cat_id`,`name`'))
{
  $cat_id=100500;
  while ($row=mysqli_fetch_assoc($res))
  {
    if ($row['cat_id']!=$cat_id)
    {
      $cat_id=(int)$row['cat_id'];
      echo '
<optgroup label="'.(array_key_exists($cat_id,$categories)?$categories[$cat_id]:'Undefined').'"></optgroup>';
    }
    echo '
<option value="'.$row['id'].'">'.$row['name'].'</option>';
  }
  mysqli_free_result($res);
}
1
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
12.07.2015, 15:52  [ТС]
Спасибо, Код работает, но не закончен до конца как я понимаю.
Сейчас он выводит все услуги и категорию выводит 'Undefined' во всех случаях.

Почитал в интернете про
PHP
1
array_key_exists
Мы подставляем категорию `cat_id` из `oc_service`и проверяем его в массиве categories, который мне нужно еще определить, верно?

и дальше идет проверка, которую помню из С++, "(array_key_exists($cat_id,$categori es)" ? (если присутствует выводим название категории) : (иначе 'Undefined')



Я правильно понял? Или опять я ....?)
0
Заблокирован
12.07.2015, 16:54
Цитата Сообщение от Июнь Посмотреть сообщение
Отдельным циклом можете считать список категорий для получения их названий, либо просто хранить названия категорий в готовом массиве, в котором индексы элементов совпадают с идентификаторами категорий.
Т.е. можете сформировать массив по данным из таблицы категорий или просто определить его в коде.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
13.07.2015, 12:12  [ТС]
PHP
1
2
3
4
while($row =  mysqli_fetch_assoc($Group)) { 
$categories = array($row);
array_push($categories, $row);
}
Таким образом записываются данные в массив? Теперь он через Echo не выводит из-за того, что данные из массива идут? как их перевести в нормальный вид вот что выдает: Notice: Array to string conversion
0
13.07.2015, 17:01

Не по теме:

Учите PHP или обращайтесь к программисту. Я вам и так написала больше, чем должна была :(

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2015, 17:01
Помогаю со студенческими работами здесь

Нужно отсортировать Нужно отсортировать ListView
Прямо беда какая-то... Делаю по классике... и пример готовый в наличии есть, а у меня не работает. Вот мой код: сверху объявил: ...

даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей
вот текст проги которую я сделал, но без указателей. переделайте пожалуйста #include&lt;fstream.h&gt; #include&lt;iostream.h&gt; ...

Нужно, импортировать из файла в массив 16 значений, таких файлов много, вот нужно импортировать и отсортировать по возрастанию
что то у меня не получаеться Program abli; var a: file of integer; i: byte; mas: array of integer; b:array of integer; ...

Нужно записывать данные в базу данных только при условии если данные уникальны
нужно пропустить те строки в БД, которые совпадают с массивом данных, который записывается в БД. Вот что вышло гляньте кто...

Нужно записать данные в файл, а затем число в начало файла, не удаляя уже имеющиеся данные
Здравствуйте, пишу задачу в ограниченное время. С помощью какого оператора и как можно перейти в начало файла и записать туда число, не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru