поиск внутри сериализованного значения, хранящегося в базе данных - PullRequest
1 голос
/ 29 августа 2011

У меня есть таблица для объектов недвижимости, в которой функции для объектов недвижимости хранятся в сериализованном массиве. Например, дом может иметь Wi-Fi, бассейн, сад и так далее. Эти функции формируют список, массив со значениями и сериализуются и сохраняются в столбце таблицы с именем функции. Когда мне нужно отобразить эти функции, я получаю массив сериализации, десериализуем его и отображаю. Теперь, используя эту таблицу, как я могу найти дом с Wifi AND Pool? Во-вторых, эта структура была хороша до тех пор, пока поиск по времени не выходил за рамки, но я готов ее изменить, если есть серьезные причины, помимо поиска, ее изменить.

Обновление
Функция Wi-Fi может быть записана как «Wi-Fi» или «Wi-Fi доступен» или «оснащен Wi-Fi» или что-нибудь. Таким образом, Wi-Fi является ключевым словом, а функции фактически вводятся владельцами недвижимости, поэтому похожие функции могут отличаться. Следовательно, идея состояла в том, чтобы сохранить функции в массиве serilised

1 Ответ

2 голосов
/ 29 августа 2011

Формат сериализации PHP (или JSON) не являются родными типами данных в SQL. Но XML для примера будет. Но это часто также излишне.

Альтернативой подходу с отдельными таблицами мог бы быть список существующих функций в CSV (родной для SQL благодаря FIND_IN_SET).

В противном случае вы можете использовать некоторые догадки для предварительной фильтрации поискового запроса с помощью WHERE options REGEXP 's:4:"Pool";b:1', если вы хотите сохранить сериализованный большой двоичный объект. (Вам необходимо знать точную схему сериализации для каждого свойства, за которым вы присматриваете.)

Для наборов данных, которые не относятся к базе данных, я считаю это уместным даже. Но так как вы используете DB в основном для поиска только этого большого двоичного объекта, вам следует пересмотреть.

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