MySQL хранение и в поисках строки
Вопрос
В настоящее время я в настоящее время в процессе разработки собственной системы блога. В настоящее время при создании нового поста вы получаете возможность архивировать его категории вашего собственного выбора.
В настоящее время я храним категории как значение varchar в базе данных mysql. В качестве примера поля будет содержать 2,4,8, если пользователь выбрал категории с идентификатором: 2, 4 и 8.
Чтобы получить такие сообщения в блоге для категории с ID 4, я использую:
SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,','))
Мне сказали, что ценности, отделенные с десятичной запятой, - это нее (очень плохо), когда речь идет о хорошей структуре базы данных!
Может ли кто-нибудь предоставить мне хороший путь / метод, чтобы сделать это самым эффективным способом?
заранее спасибо
Решение
Гибкая и надежная установка, как написано так много раз в так:
POSTS
id
name
text
CATEGORIES
id
name
POST_CATEGORIES
post_id
category_id
Где текущий запрос будет:
SELECT p.id, p.name, p.text
FROM posts p
JOIN post_categories pc
ON pc.post_id = p.id
AND pc.category_id = 4;
Другие советы
Посмотрите в нормализацию реляционной базы данных. Для вашего конкретного случая рассмотрите возможность создания 2 дополнительных таблиц, категорий и блогатегорий в дополнение к таблице содержимого блога. Категории содержат определение всех тегов / категорий и ничего другого. Таблица BlogCategories - это перекрестная таблица «МНОГДА», которая, вероятно, в вашем случае содержит ссылку на внешний ключей на таблицу блога и внешний ключей ссылку на таблицу категорий. Это позволяет связаться с 1 записью блога с несколькими категориями и 1 категорией, которая должна быть связана с несколькими записями блога.
Получение данных не будет никакой сложнее, чем 3 стола, присоединяйтесь к худшему, и вы будете вне подстрочного бизнеса, чтобы понять нашу вашу деловую логику.