Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Каталог в CMS 
:(
    Опции темы
Truniger
Дата 24.4.2013, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 23.11.2012

Репутация: нет
Всего: нет



Здравствуйте! В веб программировании я совсем не давно, сейчас занимаюсь написанием CMS для каталога с платным скачиванием (продажа файлов), по сути это мой первый проект веб что касается именно программирования, поэтому я учусь прямо походу. Использую объектно ориентированное программирование php+mysql (с языком тоже знакомлюсь впервые, поэтому прошу извинить за глупые вопрос, если таковые будут  smile ). На данный момент реализовал пользовательскую часть сайта кроме каталога, админку с возможностью редактирования всех пунктов меню и простенькую авторизацию. В общем, я сделал все кроме непосредственно каталога, ведь как я понимаю реализовывать каталог нужно тоже через БД, но мне нужен каталог с категориями и вложенными в них подкатегориями, и возникает вопрос как реализовать это в mysql? Получается, что в ячейке таблицы должна быть новая таблица.

PS:Извините если непонятно объясняю, заранее спасибо!   smile 

Это сообщение отредактировал(а) Truniger - 24.4.2013, 22:43
PM MAIL   Вверх
Arantir
Дата 24.4.2013, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(Truniger @  24.4.2013,  21:41 Найти цитируемый пост)
Получается, что в ячейке таблицы должна быть новая таблица.

Почитайте о том, что такое реляционная база данных. А mysql именно такая.

Вложенные категории создаются просто. Делается таблица со столбцами "категория" и "родитель" (родительская категория). При выборке с указанием конкретного родителя вы получите все подкатегории для указанной. А для корневых категорий просто используется некое особое значение (пустая ячейка, NULL, -1 и т.п.)

Структура реляционных БД, обычно, сама по себе не отображает объектной модели того, что в ней содержится. Связи получаются косвенными. Реальную структуру, обычно, отображают ORM (объектная модель на каком-то языке программирования, набор классов, полей и методов, отображающий взаимодействия объектов, содержащихся в БД). ORM не является обязательной при разработке. Если разработчик знает структуру БД, то может реализовать все нужные запросы напрямую.

Это сообщение отредактировал(а) Arantir - 24.4.2013, 23:13


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Truniger
Дата 25.4.2013, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 23.11.2012

Репутация: нет
Всего: нет



Цитата(Arantir @ 24.4.2013,  23:10)

Структура реляционных БД, обычно, сама по себе не отображает объектной модели того, что в ней содержится. Связи получаются косвенными. Реальную структуру, обычно, отображают ORM (объектная модель на каком-то языке программирования, набор классов, полей и методов, отображающий взаимодействия объектов, содержащихся в БД).

То есть я так понял ORM это какое дополнительное ПО которое упрощает работу с БД?

Это сообщение отредактировал(а) Truniger - 25.4.2013, 11:10
PM MAIL   Вверх
Arantir
Дата 25.4.2013, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



ORM — это просто представление БД в виде классов (как если бы данные из БД были объектами в вашей программе). 
Встроенные возможности формирования запросов у существующих ORM-библиотек ограничены. Реляционность БД позволяет осуществить многие действия намного эффективнее, чем это бы делалось с объектной точки зрения.
Зачастую разработчик сам реализует некоторое запросы.
ORM — только обертка. Распространенный прием в ООП. Вы просто инкапсулируете некие операции в классе (наборе классов). Программа теперь может пользоваться этими классами и ей абсолютно все равно, что именно у них внутри.

Но лучше сразу в ORM не вдавайтесь. Разберитесь с созданием БД в mysql. На самом деле это довольно просто. Я привел ORM просто как пример, а не как совет того, с чего стоит начинать.

Я чего вообще про ORM... Вот Вы написали 
Цитата(Truniger @  24.4.2013,  21:41 Найти цитируемый пост)
Получается, что в ячейке таблицы должна быть новая таблица.
Это верно с объектной точки зрения. У вас есть класс Категория и в нем есть поле подкатегории. И в этом поле содержатся объекты того же класса Категория.
Но при создании реляционной структуры БД надо делать акцент на отношениях между объектами. 
Ход мыслей примерно такой:
Категории — просто объекты. Можно просто сделать таблицу с (id, имя_категории).
Подкатеории связаны с категорией тем, какая категория для подкатегории есть родительской. Можно сделать таблицу (id, родитель, имя_категории).
И катеории и подкатегории по сути являются одинаковыми объектами. Просто у категорий нет родителей, а у подкатегорий есть. Значит можно сделать одну таблицу (id, родитель, имя_категории) и просто не указывать родителя корневым категориям.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Truniger
Дата 25.4.2013, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 23.11.2012

Репутация: нет
Всего: нет



Цитата(Arantir @ 25.4.2013,  12:35)

Категории — просто объекты. Можно просто сделать таблицу с (id, имя_категории).
Подкатеории связаны с категорией тем, какая категория для подкатегории есть родительской. Можно сделать таблицу (id, родитель, имя_категории).
И катеории и подкатегории по сути являются одинаковыми объектами. Просто у категорий нет родителей, а у подкатегорий есть. Значит можно сделать одну таблицу (id, родитель, имя_категории) и просто не указывать родителя корневым категориям.


А, вот теперь я кажется вас понял, то есть в БД что категории что подкатегории являются одинаковыми объектами - таблицами, а каталог это просто грамотно выстроенные "взаимоотношения" между ними? 

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

Это сообщение отредактировал(а) Truniger - 25.4.2013, 12:57
PM MAIL   Вверх
Arantir
Дата 25.4.2013, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(Truniger @  25.4.2013,  11:50 Найти цитируемый пост)
то есть в БД что категории что подкатегории являются одинаковыми объектами - таблицами

Таблицы представляют совокупность объектов. Если проводить параллели: таблица — как класс, имена столбцов — имена полей класса, строки таблицы — объекты класса с соответствующими значениями.

Цитата(Truniger @  25.4.2013,  11:50 Найти цитируемый пост)
а каталог это просто грамотно выстроенные "взаимоотношения" между ними? 

В принципе — да. "Реляционный" и исходит от англ. relation (отношение, связь).

Главное помнить, что в ячейке может содержаться только простое значение (число, строка, двоичные данные и т.п.). Не стоит, например, пробовать запихнуть в одну ячейку таблицы форумных постов некий список из тегов, разделяя их запятыми. Для подобной цели надо создать таблицу, где каждая пара (пост, тег) будет отдельной строкой.



--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.