テーブル内のほとんどのデータを処理する mySQL ストアド プロシージャがあります。
SQL Fiddle Demo -> これについて Mahmoud Gamal に感謝します。
問題は、この手順が多くのメタデータで機能しないことです:
CREATE TABLE Metadata (`metadata_id` int, `metadata_name` varchar(25)) ;
INSERT INTO Metadata
(`metadata_id`, `metadata_name`)
VALUES
(1, 'duration'),
(2, 'extension'),
(3, 'size'),
(4, 'duration2'),
(5, 'extension2'),
(6, 'size2'),
(7, 'duration3'),
(8, 'extension3'),
(9, 'size3'),
(10, 'duration4'),
(11, 'extension4'),
(12, 'size4'),
(13, 'duration5'),
(14, 'extension5'),
(15, 'size5'),
(16, 'duration6'),
(17, 'extension6'),
(18, 'size6')
;
@ で宣言されたセッション変数が短すぎるようです。
このテーブルには、最後に約 150 のメタデータが含まれます。
SET @sql = NULL;
SET @cols = NULL;
SELECT
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(m.metadata_name = ''',
m.metadata_name, ''', v.value, 0)) AS ', '''', m.metadata_name, '''')
) INTO @cols
FROM Metadata AS m;
SET @sql = CONCAT('
SELECT
v.file, ', @cols ,'
FROM `values` AS v
INNER JOIN metadata AS m ON v.metadata_id = m.metadata_id
GROUP BY v.file');
prepare stmt
FROM @sql;
execute stmt;
2 つの変数@sql
と@cols
このデモのような単純なシナリオでは正常に機能しますが、私の場合は 150 のメタデータがあり、変数が短すぎるというエラーが発生しました。
2 つの変数を宣言して、150 のメタデータ名を連結することでこの長すぎるテキストを取得するにはどうすればよいでしょうか?
前もって感謝します