добавить отображение и обновить MySQL поле с выпадающим - PullRequest
0 голосов
/ 13 ноября 2011

Я хочу сохранить набор категорий в поле базы данных mysql.Поле varchar и категории будут введены через запятую.При загрузке в форме добавления или обновления должен быть раскрывающийся список категорий с несколькими вариантами выбора и поле для ввода новой категории или набора категорий, разделенных запятой.

Итак, проблема в том, как:

  1. извлечение списка категорий в виде столбца из базы данных
  2. сделать раскрывающийся список только одной из каждой категории, даже если в каждой строке будет несколько категорий, например:

    row1: category: entertainment,news,music
    row2: category: news,religion,entertainment
    row3: category: news,music,religion
    

    и отображаемый раскрывающийся список должен выглядеть следующим образом:

    entertainment
    news
    religion
    music
    
  3. Разрешить пользователю добавлять новые категории в базу данных,в дополнение к выборам в выпадающем списке.

Возможно, есть лучший способ сделать это, но, поскольку я не очень опытен с php / mysql, я не уверенкак.Я попытался добавить столбец категории в базу данных как тип SET или тип ENUM в PHPMyAdmin, но независимо от того, что я сделал, я получил ошибку 1064, поэтому я сдался и решил просто использовать текст с разделителями-запятыми.Я считаю, что мне нужно будет использовать функции разнесения и взрыва php для хранения этих данных.На данный момент есть только текстовое поле для категории, но это не защитит пользователя от опечаток, которые могут привести к появлению дополнительных категорий из-за ошибок в написании существующей категории.

1 Ответ

0 голосов
/ 13 ноября 2011

Ну, я думаю, вы не правы в схеме базы данных.Это типичное отношение 1 к n, поэтому обычно вы должны иметь что-то вроде:

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

  • categoryId
  • name
  • ... (другие поля)

[Content Table] (Таблица, содержащая данные для классификации)

  • contentId
  • name
  • ... (другие поля)

И у вас есть таблица, чтобы объединить их и разрешить множественные связи.

[Content_Belongs_To_Category Table]

  • contentId
  • categoryId

Итак, теперь вы выбираете таблицу категорий, чтобы получить список, необходимый для раскрывающегося списка, и для каждой категории контентпринадлежит вам добавить строку в таблицу отношений.

Наконец, вы можете объединить [Content Table] с [Table Table] и [Content_Belongs_To_Category Table], чтобы получить список категорий, к которым принадлежит элемент (как массив, или вы можете использовать GROUP_CONCAT, чтобы получить их в виде запятойразделенная строка)

Возможно, в моем ответе слишком много неизвестных терминов, но это должно помочь вам разобраться (правильно:)).

Редактировать: Примеры операторов SQL

  • Получить все категории

SELECT * FROM Categories

  • Получить категории, к которым принадлежит контент

SELECT *FROM Content_Belongs_To_Category cbtc INNER JOIN Категории c ON cbtc.categoryId = c.categoryId ГДЕ cbtc.contentId =

  • Получить содержимое и категории в виде строки

ВЫБРАТЬ co.contentId,min (co.name) в качестве имени, group_concat (c.name) в качестве категории из контента co ВНЕШНЕЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Content_Belongs_To_Category cbtc ON cbtc.contentId = co.contentId ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ Категории cON cbtc.categoryId = c.categoryId GROUP BY co.contentId

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...