Как вывести категории с бд - PHP

169
10 декабря 2016, 10:14

Есть HTML код и таблица (category) из 15 brand и id. Как грамотно вывести данные в теги li где li=сектор 1? Каждые 5 наименований относятся разным разделом. Пример по id, Вещи от 1-5, Для дома 6-11 и Хобби от 11-15.

Главное. Чтобы потом когда я буду делать Подачу объявления, с таким же запросом мог эти значения брендов спокойно передавать в бд в другую таблицу. И я мог бы перехватывать эти значения, для того чтобы выводить товар по категориям. Вроде понятно объяснил

<li><a id="index1"><img src="http://www.cyberforum.ru/images/things.png" id="things-images">Вещи</a> 
<ul class="category-section"> 
<li><a href=""><strong>Все вещи</strong></a></li> 
<li><a>сектор 1</a></li>                
</ul>          
</li> 
<li><a id="index2"><img src="http://www.cyberforum.ru/images/for_home.png" id="home-images">Для  дома</a> 
<ul class="category-section"> 
<li><a href=""><strong>Все для дома</strong></a></li> 
<li><a>сектор 1</a></li>                 
</ul>          
</li> 
<li><a id="index3"><img src="http://www.cyberforum.ru/images/hobby.png" id="hobby-images">Хобби</a> 
<ul class="category-section"> 
<li><a href=""><strong>Все для хобби</strong></a></li> 
<li><a>сектор 1</a></li>                 
</ul>          
</li>

category

Answer 1

Такая архитектура базы данных никуда не годится. Но если уже начал, и не хочется переделывать, тогда добав еще один столбец в таблицу категорий, например category_type, после id. Либо VARCHAR и указывать название словом, либо INT и указывать номер этого типа. Потом, чтобы не заморачиваться, делаешь простейший запрос на выборку, получаешь все данные. Потом проходишься циклом и группируешь по этому category_id в новый массив. Как то так.

А вот на странице где этот список выводится, список выводишь цыклом:

<?php foreach($categoryArr as $category): ?>
    <ul class="category-section">
        <li> <?= $category['name'] ?>
    </ul>
<?php endforeach; ?>

Упрощено, конечно, но должно быть понятно)

UPDATE Добавил примерные таблицы, и немного кода, работоспособность не проверял, но кажется всё должно работать. Если что, исправлю.

Групы категорий

"CREATE TABLE `category_group` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(55) NOT NULL,
    `deleted` INT(11) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM";

id - уникальный идентификатор

title - название группы (для админ панели, если такая будет, все ради удобства)

deleted - если надо удалить категорию, принимает значения 0 и 1

Таблицы категорий

"CREATE TABLE `category` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `group_id` INT(11) NOT NULL,
    `url` VARCHAR(255) NOT NULL,
    `title` VARCHAR(35) NOT NULL,
    `meta_title` VARCHAR(35) NOT NULL, 
    `meta_description` TEXT NOT NULL,
    `meta_keywords` TEXT NOT NULL,
    `hidden` INT(11) NOT NULL DEFAULT '0',
    `deleted` INT(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM";

id - уникальный идентификатор

group_id - идентификатор для групы, іd берется из таблицы 'category_group'

url - адрес каждой категории

title - название категории (еще выводится в теге TITLE)

meta_title - заголовок (мета-данных)

meta_description - описание (мета-данные)

meta_keywords - ключевые слова (мета-данные)

hidden - если надо будет скрыть категорию, принимает значения 0(показано) и 1(скрыто)

deleted - если надо удалить категорию, принимает значения 0(актуальная) и 1(удалена)

Теперь работа с БД:

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(mysqli_error($link));
$group_query = "SELECT * FROM category_group WHERE deleted = 0";
$res = mysqli_query($link, $group_query) or die(mysqli_error($link));
while ($row = mysqli_fetch_assoc($res))
    $groupTemp[] = $row;
$category_query = "SELECT * FROM category WHERE visible=0 AND deleted=0";
$res = mysqli_query($link, $category_query) or die(mysqli_error($link));
while ($row = mysqli_fetch_assoc($res))
    $categoryTemp[] = $row;

Теперь делаем из двух массивов один

for ($i = 0; $i < count($groupTemp); $i++) {
    for ($o = 0; $o < count($categoryTemp); $o++)
        if ($groupTemp[$i]['id'] == $categoryTemp[$i]['group_id']) {
            $categoryByGroup[$groupTemp[$i]['title']]['group_title'] = $groupTemp[$i]['title'];
            $categoryByGroup[$groupTemp[$i]['title']][] = $categoryTemp[$i];
        }
}

И наконец-то вывод:

<? foreach ($categoryByGroup as $group): ?>
    <ul class="category-section">
      <?php foreach ($group as $category): ?>
      <li><a href="<?= $category['url'] ?>"> <?= $category['title'] ?> </a></li>
      <?php endforeach; ?>
    </ul>
<? endforeach; ?>
READ ALSO
Самый простой ЧПУ [закрыто]

Самый простой ЧПУ [закрыто]

Есть лендинг с 2 страницами indexhtml и en

291
Как определить корневой веб каталог php при настройках Flash Builder?

Как определить корневой веб каталог php при настройках Flash Builder?

ЗдравствуйтеДелаю Flex проект на Flash Builder с php типом сервера

187
Вопрос который решаю 4 дня [закрыто]

Вопрос который решаю 4 дня [закрыто]

Всем приветтакая проблема я учу php и я придумал пример благодаря которому мой личный бизнес и мои знания php вырастут до новых высот ) Это будет...

169
Помочь с отправкой запроса на сервер. Access Denied

Помочь с отправкой запроса на сервер. Access Denied

Есть приложение на андройд (задания с фриланс сайта)Через Fiddler смог выловить http запрос для получения этих заданий

179