Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывести значения из таблицы циклом, сортируя по нужному полю

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: php / mysql
Heavenanvil
Отправлено: 03 Февраля, 2017 - 11:45:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Здравствуйте. Бьюсь над проблемой, самому решить не получается, поэтому прошу помощи у вас.

Есть таблица: "category"
В ней поля:
id_cat - порядковый номер категории (id), является числом;
name_cat - название категории, является текстовым полем;
is_main_cat - проверка, является ли категория разделом (Если 0, то не является, в остальном случае является и это значение будет id для раздела);
main_cat - id раздела, которому принадлежит категория, если сама не является разделом.
sort_cat - порядок сортировки категорий.

Как мне вывести все значения из базы в нужном порядке

CODE (html):
скопировать код в буфер обмена
  1. <ul class="1">
  2.         <li>
  3.                 <div class="2">Раздел 1</div>
  4.                 <div class="3">
  5.                         <a href="#" class="4">Категория 1</a>
  6.                         <a href="#" class="4">Категория 2</a>
  7.                         <a href="#" class="4">Категория 3</a>
  8.                 </div>
  9.         </li>
  10.         <li>
  11.                 <div class="2">Раздел 2</div>
  12.                 <div class="3">
  13.                         <a href="#" class="4">Категория 3</a>
  14.                         <a href="#" class="4">Категория 4</a>
  15.                 </div>
  16.         </li>
  17.         ...
  18. </ul>

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

(Отредактировано автором: 03 Февраля, 2017 - 19:34:20)

 
 Top
Heavenanvil
Отправлено: 03 Февраля, 2017 - 13:45:56
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Для наглядности, чтобы было понятнее, вот так выглядит таблица
Прикреплено изображение (Нажмите для увеличения)
Screenshot_2017-02-03-18-44-40.png
 
 Top
Heavenanvil
Отправлено: 05 Февраля, 2017 - 19:37:30
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Это вообще возможно сделать или я зря голову забиваю?
 
 Top
teleoperator27
Отправлено: 05 Февраля, 2017 - 19:45:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




да просто ни фига непонятно, чего надо. категорииразделынеразделыыкатего рииявляетсянеявлятеся.. ни черта не понятно. Дерево категорий вывести, что ли, надо? И чем у вас вообще категория от раздела отличается?
 
My status
 Top
Heavenanvil
Отправлено: 05 Февраля, 2017 - 19:51:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




teleoperator27, это сайдбар.

Вот так должно получиться (а как это выглядит на html я уже писал выше):
Прикреплено изображение
screen.jpg

(Отредактировано автором: 05 Февраля, 2017 - 19:52:35)

 
 Top
teleoperator27
Отправлено: 05 Февраля, 2017 - 20:04:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




 
My status
 Top
Heavenanvil
Отправлено: 06 Февраля, 2017 - 17:58:42
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




teleoperator27, в целом получилось. Но кое в чём разобраться не могу.

Мой код:
PHP:
скопировать код в буфер обмена
  1. ...
  2. function tplMenu($category){
  3.         $menu = '<li>
  4.         <div class="2">'. $category['name_cat']. '</div>';
  5.                
  6.                 if(isset($category['childs'])){
  7.                         $menu .= '<div class="3"><a href="#" class="4">'. showCat($category['childs']) .'</a></div>';
  8.                 }
  9.         $menu .= '</li>';
  10.         return $menu;
  11. }
  12. function showCat($data){
  13.         $string = '';
  14.         foreach($data as $item){
  15.                 $string .= tplMenu($item);
  16.         }
  17.         return $string;
  18. }
  19.  
  20. $cat_menu = showCat($tree);
  21. echo '<ul class="1">'. $cat_menu .'</ul>';
  22. ...


В итоге получается вот так:
CODE (html):
скопировать код в буфер обмена
  1. <ul class="1">
  2.         <li>
  3.                 <div class="2">Раздел 1</div>
  4.                 <div class="3">
  5.                         <a href="#" class="4"></a>
  6.                 </div>
  7.         </li>
  8.         <li>
  9.                 <a href="#" class="4">
  10.                         <div class="2">Категория 1</div>
  11.                 </a>
  12.         </li>
  13.         <li>
  14.                 <a href="#" class="4">
  15.                         <div class="2">Категория 2</div>
  16.                 </a>
  17.         </li>
  18.         <li>
  19.                 <a href="#" class="4">
  20.                         <div class="2">Категория 3</div>
  21.                 </a>
  22.         </li>
  23. </ul>
  24. ...


А мне нужно вот так:
CODE (html):
скопировать код в буфер обмена
  1. <ul class="1">
  2.         <li>
  3.                 <div class="2">Раздел 1</div>
  4.                 <div class="3">
  5.                         <a href="#" class="4">Категория 1</a>
  6.                         <a href="#" class="4">Категория 2</a>
  7.                         <a href="#" class="4">Категория 3</a>
  8.                 </div>
  9.         </li>
  10.         <li>
  11.                 <div class="2">Раздел 2</div>
  12.                 <div class="3">
  13.                         <a href="#" class="4">Категория 3</a>
  14.                         <a href="#" class="4">Категория 4</a>
  15.                 </div>
  16.         </li>
  17.         ...
  18. </ul>


Можете помочь?
 
 Top
Heavenanvil
Отправлено: 07 Февраля, 2017 - 16:28:56
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Извиняюсь, что поднимаю тему, хотя прошли всего сутки, но я бьюсь безрезультатно весь день :(
 
 Top
andrewkard
Отправлено: 08 Февраля, 2017 - 10:52:28
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Heavenanvil
по сути Вам нужно сформировать массив вида:
PHP:
скопировать код в буфер обмена
  1.  
  2. $data = [
  3.     1 => [1,2,3],
  4.     2 => [3,4]
  5. ];
  6.  


где ключем будет номер главного раздела, а значением - ids категорий, и тогда так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <ul class="1">
  3.     <?PHP foreach($data as $main => $categories){?>
  4.         <li>
  5.             <div class="2">Раздел <?=$main?></div>
  6.             <div class="3">
  7.                 <?PHP foreach($categories as $category){?>
  8.                     <a href="#" class="4">Категория <?=$category?></a>
  9.                 <?PHP } ?>
  10.             </div>
  11.         </li>
  12.     <?PHP } ?>
  13. </ul>
  14.  
 
 Top
Heavenanvil
Отправлено: 08 Февраля, 2017 - 13:39:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




andrewkard пишет:
по сути Вам нужно сформировать массив вида...

andrewkard, а как мне сформировать такой массив?
 
 Top
andrewkard
Отправлено: 08 Февраля, 2017 - 13:51:06
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Heavenanvil пишет:
а как мне сформировать такой массив?

вариантов много, можно подзапросами, можно и просто циклом, например так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $rows = [];
  3.  
  4. $data = [];
  5.  
  6. foreach($rows as $row){
  7.     if(!empty($row['main'])){
  8.         $data[$row['main']] = [];
  9.     }
  10. }
  11. foreach($rows as $row){
  12.     if(isset($data[$row['cat']])){
  13.         $data[$row['cat']][] = $row['id'];
  14.     }
  15. }
  16.  
 
 Top
Heavenanvil
Отправлено: 08 Февраля, 2017 - 14:05:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Что-то я туплю, но ругается на квадратные скобки:
Parse error: syntax error, unexpected '[' in .../site.ru/file.php on line 14

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include("db.php");
  3. $sql = mysql_query("SET NAMES 'utf8'");
  4.  
  5. function getCat($sql){
  6.         $sql = mysql_query("SELECT * FROM `category`");
  7.         $cat = array();
  8.         while($row = mysql_fetch_assoc($sql)){
  9.                 $cat[$row['id_cat']] = $row;
  10.         }
  11.         return $cat;
  12. }
  13. $rows = [];
  14. $data = [];
  15. foreach($rows as $row){
  16.     if(!empty($row['main'])){
  17.         $data[$row['main']] = [];
  18.     }
  19. }
  20. foreach($rows as $row){
  21.     if(isset($data[$row['cat']])){
  22.         $data[$row['cat']][] = $row['id'];
  23.     }
  24. }
  25.  
  26. ?>
  27. <ul class="1">
  28.     <?PHP foreach($data as $main => $categories){?>
  29.         <li>
  30.             <div class="2">Раздел <?=$main?></div>
  31.             <div class="3">
  32.                 <?PHP foreach($categories as $category){?>
  33.                     <a href="#" class="4">Категория <?=$category?></a>
  34.                 <?PHP } ?>
  35.             </div>
  36.         </li>
  37.     <?PHP } ?>
  38. </ul>
 
 Top
andrewkard
Отправлено: 08 Февраля, 2017 - 14:16:19
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




а, значит версия php древняя, используйте синтаксис $data = array(); и обратите внимание, что ключи я проставил выдуманные, Вам нужно свои.
(Добавление)
а в $rows я предполагал, что будут все строчки Вашей таблицы.
 
 Top
Heavenanvil
Отправлено: 08 Февраля, 2017 - 14:43:59
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Я извиняюсь, что так туплю, голова уже перегружена :)
Спасибо, что водитесь со мной

andrewkard пишет:
а в $rows я предполагал, что будут все строчки Вашей таблицы.

Получается, что:
PHP:
скопировать код в буфер обмена
  1. $request = mysql_query("SELECT * FROM `category`");
  2. $rows = mysql_fetch_array($request);


Чему что тогда в $data храниться должно?

Сам код сейчас выглядит вот так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include("db.php");
  3. $sql_uft8 = mysql_query("SET NAMES 'utf8'");
  4. $request = mysql_query("SELECT * FROM `category`");
  5. $rows = mysql_fetch_array($request);
  6.  
  7. $data = array();
  8.  
  9. foreach($rows as $row){
  10.     if(!empty($row['main'])){
  11.         $data[$row['main']] = array();
  12.     }
  13. }
  14. foreach($rows as $row){
  15.     if(isset($data[$row['parent']])){
  16.         $data[$row['parent']][] = $row['id_cat'];
  17.     }
  18. }
  19.  
  20. ?>
  21. <ul class="1">
  22.     <?PHP foreach($data as $main => $categories){?>
  23.         <li>
  24.             <div class="2">Раздел <?=$main?></div>
  25.             <div class="3">
  26.                 <?PHP foreach($categories as $category){?>
  27.                     <a href="#" class="4">Категория <?=$category?></a>
  28.                 <?PHP } ?>
  29.             </div>
  30.         </li>
  31.     <?PHP } ?>
  32. </ul>

Вроде выводит, но некорректно. На зеркале у меня вообще ругается на:
PHP:
скопировать код в буфер обмена
  1. Warning: Illegal string offset 'parent' in .../site.ru/file.php on line 17


Сама структура таблицы сейчас выглядит вот так
Прикреплено изображение (Нажмите для увеличения)
screen.png
 
 Top
andrewkard
Отправлено: 08 Февраля, 2017 - 15:00:51
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Наверное так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $rows = array();
  3.  
  4. while ($row = mysql_fetch_array($request, MYSQL_ASSOC)) {
  5.     $rows[] = $row;
  6. }
  7.  
  8. $data = array();
  9.  
  10. foreach($rows as $row){
  11.     if(empty($row['parent'])){
  12.         $data[$row['id_cat']] = array();
  13.     }
  14. }
  15. foreach($rows as $row){
  16.     if(isset($data[$row['parent']])){
  17.         $data[$row['parent']][] = $row['id_cat'];
  18.     }
  19. }
  20.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB