Обновление и удаление данных в базе данных MySQL - PullRequest
0 голосов
/ 02 октября 2011

Я использую codeigniter . у меня есть следующие значения как json_encode в строке базы данных, я хочу удалить значение 3 в строке 1 и значения 14 & 5 в таблице базы данных.

DELETE -> значение 3 в строке 1 и значения 14, 5 в строках 2
ОБНОВЛЕНИЕ -> значение 2 до 8 в строке 1 и значение от 3 до 17 в строках 2.

Как запросить значения json?

Строка 1:

id=1

[{
    "hotel_id": ["3"]
}, {
    "hotel_id": ["2"]
}, {
    "hotel_id": ["1"]
}]

Строка 2:

id=2

[{
    "hotel_id": ["14"]
}, {
    "hotel_id": ["5"]
}, {
    "hotel_id": ["4"]
}, {
    "hotel_id": ["3"]
}, {
    "hotel_id": ["2"]
}, {
    "hotel_id": ["1"]
}]

Ответы [ 2 ]

1 голос
/ 02 октября 2011

Большинство комментаторов пытаются сказать, что ваша проблема очень распространена при хранении сериализованных данных в БД (например, в строках JSON). Именно поэтому это считается плохой практикой. Все замечательные инструменты реляционных баз данных, такие как индексация, сортировка, группировка и запросы по любому столбцу, исчезают, когда данные сохраняются в виде большой кучи символов, которые БД не может проанализировать.

Решение состоит в том, чтобы сохранить фактические данные в БД и отформатировать их как JSON только на стороне приложения, для использования при необходимости. В вашем случае вы можете создать таблицу типа hotels_to_users (я делаю некоторые предположения о значении ваших данных, надеясь, что вы их получите, даже если это не совсем то, что вам нужно). Эта таблица будет выглядеть так:

user_id (?) |  hotel_id
1           |  1
1           |  2
2           |  14

Это позволит легко запрашивать, обновлять, вставлять и удалять любую конкретную гостиницу любому пользователю.

Надеюсь, что это имеет смысл, и вы можете сделать это изменение, иначе ваша проблема может быть решена с помощью некоторых строковых функций MySQL, таких как REPLACE и SUBSTR, или путем выполнения всей работы в коде приложения и сохранения нового JSON, когда сделанный. В любом случае, поддержание этого будет трудным и потребует больше усилий в долгосрочной перспективе.

0 голосов
/ 02 октября 2011

Хранение данных в виде json_encode - действительно плохой выбор, так как вы ничего не можете сделать с помощью sql.

Вы должны взять свои данные, прочитать их (json_decode), сделать что-то с помощью php, а затем заменитьновые данные с новым json_encode.Действительно плохо.

Подумайте об изменении способа хранения этих значений.Может быть, стол поддержки.

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