Есть ли способ получить пары field => value из подвыбора в MySQL? - PullRequest
1 голос
/ 24 июня 2009

Я думаю о том, как лучше всего реализовать Audit Trail в приложении, которое поддерживается MySQL. Несколько систем имеют доступ к одной и той же базе данных и таблицам, поэтому я подумал, что триггеры будут лучшим решением.

Однако я не хочу писать триггер вручную для каждой таблицы, поэтому я хочу автоматически регистрировать имя поля и данные для каждой вставки / удаления.

Что-то вроде:

INSERT INTO `audits` SET
    `table_name` = 'jobs',
    `table_key` = OLD.`id`,
    `changed_at` = NOW(),
    `notes` = (SELECT * FROM NEW);

Однако подвыбор вернет набор результатов из одной строки, который не может рассматриваться как строка. Я хочу функцию, которая возьмет эту строку и преобразует ее в:

"id = 1, name = 'something', another_field = 'data'"

Или что-то в этом роде.

Редактировать: Суть в том, что мне не нужно вводить каждое поле в каждой таблице. Там более 120 таблиц, а некоторые имеют> 100 полей. Если это невозможно в самом MySQL, думаю, я напишу небольшую программу, которая прокручивает каждую таблицу и поле и генерирует для меня SQL.

Ответы [ 4 ]

1 голос
/ 24 июня 2009
SELECT  CONCAT('id = ', id, ', name = ''', name, ''', another_field = ''', data, '''')
FROM    NEW
0 голосов
/ 03 марта 2010

В конце концов я написал PHP-скрипт для обхода каждой соответствующей таблицы и создания для меня триггеров.

0 голосов
/ 24 июня 2009

Вы можете просто объединить строки.

например:

select concat("id = ", t.id, "name = ", t.name) from myTable t;
0 голосов
/ 24 июня 2009

только

SELECT GROUP_CONCAT (col1) ИЗ таблицы

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

ссылка

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