Как я понял, аналога Explode в MySQL нет. Но как быть с такими ситуациями? Есть набор материалов в базе данных, каждый из которых имеет строковой параметр с перечисленными значениями (11,12,35
), и по этому параметру необходимо обеспечить поиск. Ну, вернее, по его части. Например, 11
.
Когда же дело доходит до поиска, например, по значению 1
, то, как и следовало ожидать, находятся все материалы, куда включено данное значение: 1
, 11
, 12
, 21
,... Как быть в такой ситуации?
Заводить отдельную таблицу со значениями параметров и затем третью, связывающую их "многие ко многим"? Но таких параметров много, причем, большинство из них ограничено парой десятков значений, а некоторые - и вообще, двумя-тремя, то есть, заводить +2 таблицы для каждого из таких параметров было бы неприятно. Хотя, возможно, это и правильное решение...
Пока вопрос решил записью в базу данных параметров, окруженных запятыми (,1,2,3,
) - если в такой строке искать ,1,
, то проблем с другими значениями возникнуть не должно. Правда, этот вариант исключает возможность поиска по нескольким параметрам.
С подобными строками одна проблема - использование индексов для поиска невозможно. и любой поиск будет полностью перебирать всю таблицу. Вообще есть функция find_in_set
, которая ищет значение в списке через запятую, но опять же полным перебором. или concat(',',filed,',') like '%,1,%'
. Или вообще concat(',',filed,',') regexp ',(1|15|23),'
для поиска любого из 3х перечисленных значений.
Отдельная таблица для быстрого поиска - наиболее правильное решение, т.к. наверняка в ней вот те значения 1, 11, 21
будут foreign key из другой таблицы, то на них уже будет построен индекс и при поиске where field=1
будут отобраны только нужные записи и не будет полного перебора таблицы.
Единственный случай, когда отдельная таблица замедляет работу - это выборка всех значений для конкретной записи. Считать одну строку и сразу показать - конечно быстрее. При частых выборках возможно есть смысл внести избыточность и хранить обоими способами.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Какие есть контролы/библиотеки для отображения большого массива точек? Win2d пробовал, работает отвратительноНо проблема не в алгоритме, т
Необходимо сделать в главном окне в центре Label и чтобы каждые 2 секунды текст плавно сменялся другимТекст можно указать в массиве string[], сделать...
Вылезает при компиляции проектаИ из проекта исчезли все ссылки на форму