|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.11.2010, 07:29 | #1 |
Пользователь
Регистрация: 27.08.2010
Сообщений: 16
|
Рубрики статей
Столкнулся с такой задачей. Мне необходимо задавать статьям категории (рубрики). У одной статьи может быть задано несколько (до 5) категорий. Всего же типов категорий более 100. Решил создать поле category типа varchar(20) и записывать туда id категории в таком виде (через запятую):
Код:
PHP код:
|
15.11.2010, 09:12 | #2 |
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
ENUM - тип поля, который вам нужен. Это самое правильное решение.
|
15.11.2010, 09:15 | #3 |
Пользователь
Регистрация: 27.08.2010
Сообщений: 16
|
Но ведь в поле ENUM можно будет записать только одну рубрику. А мне надо несколько рубрик для одной статьи.
|
15.11.2010, 10:45 | #4 |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
Я бы создал дополнительно промежуточную таблицу article_categories:
article_id category_id с индексом по category_id Затем при добавлении новой статьи(и назначении ей нужных категорий) - заносим категории в эту таблицу: PHP код:
PHP код:
|
15.11.2010, 11:33 | #5 |
Пользователь
Регистрация: 27.08.2010
Сообщений: 16
|
Andkorol, а какие недостатки по Вашему имеются в моем решении?
|
15.11.2010, 13:01 | #6 | |
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
Цитата:
Данный метод проверен мною. |
|
15.11.2010, 16:59 | #7 |
Форумчанин
Регистрация: 20.05.2009
Сообщений: 506
|
|
15.11.2010, 23:21 | #8 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
Ну, во-первых конечно скорость : обработка вашей "LIKE-вереницы", да ещё и при большом количестве статей - дело не быстрое.
Далее - например,вы захотели изменить/удалить одну из категорий статьи. Вам нужно для этого: 1.Получить значение категорий для данной статьи (1-й запрос). 2.Разбить полученную строку на элементы при помощи explode(). 3.Найти в полученном массиве нужный ID. 4.Заменить его на новый(или удалить). 5.Собрать обратно новую строку при помощи implode(). 6.Внести новое значение в Базу(2-й запрос). В моём варианте: PHP код:
В моём случае в запрос просто добавляется такое условие : Цитата:
Всё дело в гибкости и масштабируемости. Нужно сразу,на этапе разработки, планировать ВСЕ возможные варианты развития событий в приложении. То,что вам сейчас кажется "ненужным и врядли когда-то необходимым" - завтра может стать ключевым моментом в вашем приложении. И будет весьма уныло переписывать горы функционала ради какой-нибудь мелкой опции,невозможной при существующем коде. |
|
16.11.2010, 08:09 | #9 | |
Пользователь
Регистрация: 27.08.2010
Сообщений: 16
|
Спасибо, Andkorol, за внятные разъяснения. Особенно вот эта часть была для меня очень полезна:
Цитата:
И еще пару вопросов. 1. Так ли необходимы наклонные кавычки в названиях таблиц и полей? 2. Как лучше назвать поле: id_article или наоборот article_id ? Заметил, что почти все пишут article_id, но у меня уже во всем приложении прописано как id_article. Или это без разницы? PHP код:
PHP код:
Последний раз редактировалось Nikolai_; 16.11.2010 в 08:14. |
|
16.11.2010, 10:07 | #10 | ||
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
Цитата:
Например,многие любят называть поле,содержащее значение даты `date` - что,вобщем-то, логично.Но date - ключевое слово в SQL(тип поля), потому встретив его в запросе - Mysql может выдать ошибку,и не выполнить запрос. Если же экранировать такое ключевое слово апострофами - это укажет,что обращение идёт к полю,а не имеется ввиду тип поля. Таким образом - экранирование апострофами не является обязательным - но может иногда избавить от длительного поиска причин "почему же коррекный запрос не проходит?". Кроме того - выделение названий полей и таблиц повышает читабельность запросов. Цитата:
Русский - "идентификатор статьи" - "id_article" Английский - "article identifier" - "article_id" Главное при этом - придерживаться ОДНОЙ логики во всём приложении - либо русской,либо английской. Потому что в процессе написания кода запросы чаще всего пишутся автоматически,по памяти - соответственно,гораздо легче их писать,когда точно знаеш,что все поля именованны в одном стиле,по одному принципу(`article_id`, `category_id`, `section_id`, `group_id`, `user_id`, etc...) - чем постоянно сверяться с "картой БД". Всё это мелочи на первый взгляд - но применение этих "мелочей" делает код понятным,последовательным и читабельным,а сам процесс разработки и отладки - более упорядоченным. Чтоб понять важность и необходимость таких мелочей - достаточно попробовать взять в доработку/поддержку чей-то чужой объёмный код,в котором всё будет отличаться от привычных вам стиля и логики(название переменных,стиль оформления кода и запросов,блоки кода и функции, прочее...) - получите бесценный опыт,поверьте. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
переход статей | timon777777 | PHP | 9 | 27.06.2010 23:16 |