сегодня тоже столкнулся с этой проблемой и собрал здесь несколько идей, и хотя вопрос не очень новый, я также оставлю свое решение:
я думаю, что ответ Клауса Быскова Хоффманн был неплохим, но я бы добавил к этому и сохранил список тегов как таблицу «многие ко многим», как он сказал, но также как сериализованную строку в некоторой форме (либо через serialize, как сказал user466764, или просто через запятую, как вы сказали сами, что может быть обработано с помощью implode / explode) в основной таблице.
да, я знаю: хранение одних и тех же данных дважды не очень хорошо воспринимается многими перфекционистами баз данных, так как это несет в себе опасность получения несоответствий, но я бы сделал это таким образом для производительности и простоты:
таблица «многие ко многим» (таблица тегов) предназначена только для поиска. чтобы повысить производительность поиска, я бы ограничил доступ к этой таблице ТОЛЬКО для поиска (и, конечно, нам нужно обновить его при редактировании тегов), но никогда не запрашивать его только для просмотра / перечисления тегов где-либо. и сериализованный список тегов предназначен для каждого места, где вы просматриваете соответствующую статью или элемент - при отображении этого элемента у вас уже есть таблица, и каждый раз, когда вы хотите отобразить эту страницу, выполняется еще один запрос к таблице тегов. ненужный, когда у вас уже есть список в главной таблице. будьте внимательны при обновлении тегов, чтобы всегда обновлять их в обоих местах, предпочтительно с помощью единственной функции установки, которая выполняет оба действия, и у вас не должно быть проблем с несогласованностью.