Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Как правильно создать таблицу в MySQL?

#1 phpuser

phpuser
  • Пользователь
  • 520 сообщений
  • Репутация: 8
0

Отправлено 31 Январь 2010 - 04:15

Народ кто знает хорошо MySQL подскажите плиз:
У меня есть 10 категорий, которые лежат в разных таблицах БД т.е. для категорий УРОКИ и СТАТЬИ одна таблица а для категории СКАЧАТЬ другая.
Сайт работает и так но как мне кажется это не правильно, мне кажется что нужно все категории хранить в одной таблице.
Создать одну таблицу и хранить в ней все категории для меня не проблема, проблема заключается в том как потом эти категории разместить в своих рубриках при условии что категории в БД будут в разброс т.к. будут добавляться новые категории старые удаляться и всё такое?
Пример:
[attachment=409:2010_01_31_040416.jpg]

P.S. Думаю что свою проблему я описал довольно понятно, но если кому то станет не понятно не ругайте ибо я её писал 4 ночи! :rolleyes:

 

 

  • 0
Вникаю в тему создания сайтов...


#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 01 Февраль 2010 - 15:49

phpuser, можно ввести 2 понятия:
Раздел - Набор списка категорий, соответствующих одной тематике (в применении к твоей задаче)
Категория - Элемент раздела включающий материалы более узкой направленности.

Твоя задача решается просто, создаём две таблицы:
1) Таблица разделов
sections(
   id - идентификатор раздела
   title - заголовок раздела
   ....
);
2) Таблица категорий
categoryes(
   id - идентификатор категории
   id_section - идентификатор раздела, к которому относится категория
   title - заголовок категории
   ....
);

проблема заключается в том как потом эти категории разместить в своих рубриках при условии что категории в БД будут в разброс т.к. будут добавляться новые категории старые удаляться и всё такое?

<?php

// коннект к серверу и выбор базы

$sections = array(); // массив разделов

/* Нам нужно обойти все разделы и получить в них категории */
// получаем разделы

$sql = "SELECT id, title FROM sections"; // формируем запрос на получение всех разделов
$result = mysql_query($sql); // выполняем запрос
while( ($section = mysql_fetch_assoc($result)) !== false )
{
$id = $section['id']; // id раздела
$title = $section['title']; // название раздела

$sections[$id] = array(); // сообщаем, что $sections[$section['id']] - это массив
$sections[$id]['title'] = $title; // заносим в элемент массива title - название раздела
$sections[$id]['categoryes'] = array(); // сообщаем, что элемент массива $sections[$section['id']] categoryes - это массив
}

// получаем категории в разделах

$sql = "SELECT id, id_section, title FROM categorues"; // формируем запрос на получение всех категорий
$result = mysql_query($sql); // выполняем запрос
while( ($category = mysql_fetch_assoc($result)) !== false )
{
$id = $category['id']; // id категории
$id_section = $category['id_section']; // id раздела, к которому относится текущая категория

$sections[$id_section]['categoryes'][$id] = $category; // добавляем категорию как элемент массива $sections[$id_section]['categoryes'] с ключем id категории
}

/* Затем этот массив можно благополучно использовать. Например нам надо вывести массив категорий относящихся к разделу с id = 6 */

$categoryes_id_6 = $sections[6]['categoryes'];
// Ниже его можем обработать
foreach($categoryes_id_6 as $category)
{
echo "<a href='[ссылка_на_категорию]?id={$category['id']}'>{$category['title']}</a>"; // выводим ссылки на категории из раздела 6
}

?>

Можно конечно не формировать столь сложные массивы и не занимать так много памяти. А просто исполнять когда нужно SQL запрос на получение списка категорий по нужному разделу. Всё зависит от задачи.
  • 0


Оформление форума – IPBSkins.ru