Попытка создать процедуру MySQL, которая объединяет любую запись таблицы в строку - PullRequest
0 голосов
/ 02 июня 2019

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

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

{{tableName:recordId|'field1Name'="field1Data";'field2Name'="field2Data"...;}}

Я пытался выяснить, как это сделать, но не знаю, как разыменовать имена полей + данные изпеременная, заполненная соответствующим оператором SELECT, и на самом деле не знает, как построить необходимую строку из всех этих данных.Я посмотрел на оператор ForEach(), но не знаю, как заставить его перебирать каждое поле записи и вызывать как имена полей, так и необходимые данные.

Каждая запись в каждой таблице, которая будетбыть разыменованным через эту процедуру имеет поле с именем "id", которое определяется как BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT и устанавливается как PRIMARY KEY в каждой из указанных таблиц.

Может кто-нибудь дать мне несколько советов о том, как поставить этовсе вместе?

Пока у меня так много всего:

CREATE PROCEDURE `CompileRecord`(
IN  tableName            VARCHAR(64),
    targetRecordId       BIGINT(20) UNSIGNED,
OUT compiledData         TEXT
)
BEGIN
    SET oldData = SELECT * FROM tableName WHERE `id`=targetRecordId LIMIT 1;
    SET compiledData = CONCAT("{{",tableName,":",targetRecordId,"|");
    IF NOT oldData IS NULL THEN
        /* 
            no idea what to do here? in PHP might look like..
            foreach ($oldData as $field => $data)
                $compiledData .= "'".$field."'=\"".$data."\";";
            ??
        */
    ENDIF
    SET compiledData = CONCAT (compiledData,"}}");
END
...