Я работаю над триггером Mysql, чтобы что-то сделать в моей базе данных. Прежде чем что-либо, я хочу проверить, существует ли значение в строке json_encode в моей таблице конфигурации и после этого приступить к запуску триггера. моя таблица config обрабатывается скриптами php и выглядит так:
------------------------------------------- | config_name | config_value | ------------------------------------------- | target_id | ["1","16","18","22","37"] | -------------------------------------------
в php мы можем использовать: if in_array (json_decode (config_value)) и …
но моя проблема заключается в синтаксисе Mysql, который не поддерживает in_array и json_decode
Как проверить, существует ли мое значение в 'config value' в триггере Mysql?
Если вы сохраняете JSON в mysql, убедитесь, что вы обновляетесь до mysql 5.7, тогда вы можете использовать диапазон доступных функций JSON . В вашем конкретном случае вы можете сделать
SELECT * FROM my_table WHERE JSON_SEARCH(config_value,"one", "17") IS NOT NULL;
У вас есть проблемы с вашими данными. Если вы обнаружите, что всегда ищете поле JSON, то это означает, что ваша таблица должна быть нормализована.
обновление: раздел 2, название изменено, как было предложено @Sammitch
Спасибо за ваш ответ. Но, к сожалению, версия mysql равна 5.1, и ее невозможно обновить. На самом деле я добавляю некоторые функции в систему voipswitch. Таким образом, моя гибкость ограничена настоящими функциями.
Я выбираю несколько тарифов, и я хочу записывать вставленные вызовы (после вставки вызовов в таблицу «вызовы» через мой триггер), которые относятся к выбранным тарифам в списке для некоторых анализов.
Кроме того, я попытался использовать функцию сериализации php вместо json_encode для хранения идентификатора моего тарифа в таблице конфигурации. Но mysql также не поддерживает неэтериализацию.