Отказ от ответственности: это решение не проверено
Я думаю, что вам нужно использовать динамический SQL, который создаст ваш оператор SELECT
и создаст псевдоним AS
на лету (AS
псевдоним определяет имя заголовка столбца)
Во-первых, вам нужно несколько справочных таблиц (предполагается, что столбцы вашей базы данных всегда на английском языке и будут рассматриваться в качестве необходимого для другого языка) *
Язык
id| LanguageName
1 | English
2 | Francais
3 | Espanola
Атрибут
id|BaseName | Translation |LanguageId
1 |Book | Livre |2
2 |Book | Libro |3
3 |Author | Auteur |2
4 |Author | Autora |3
5 |Year | Annee |2
6 |Year | Ano |3
Тогда кости вашей хранимой процедуры будут выглядеть примерно так:
SET @language:='French'; # this will be a parameter in your stored procedure
SET @LangId = (SELECT id FROM Language WHERE LanguageName = @language)
# Get the translation for the columns in your query
SET @BookTranslation:=(SELECT Translation FROM Attribute WHERE BaseName = 'Book' AND LanguageId = @LangId)
SET @AuthorTranslation:=(SELECT Translation FROM Attribute WHERE BaseName = 'Author' AND LanguageId = @LangId)
SET @YearTranslation:=(SELECT Translation FROM Attribute WHERE BaseName = 'Year' AND LanguageId = @LangId)
# build the statement
SET @sql:='SELECT '
SET @sql:=CONCAT(@sql,'Book AS `')
SET @sql:=CONCAT(@sql,@BookTranslation)
SET @sql:=CONCAT(@sql,'`,')
SET @sql:=CONCAT(@sql,'Author AS `')
SET @sql:=CONCAT(@sql,@AuthorTranslation)
SET @sql:=CONCAT(@sql,'`,')
SET @sql:=CONCAT(@sql,'Year AS `')
SET @sql:=CONCAT(@sql,@YearTranslation)
SET @sql:=CONCAT(@sql,'` ')
SET @sql:=CONCAT(@sql,'FROM TABLE01'
# Execute the statement
PREPARE dynamic_statement FROM @sql;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;
* Вы также можете рассмотреть возможность переименования столбцов в TABLE01 вATTR1, ATTR2, ATTR3 и определите английское имя атрибута в таблице Attirbute, однако это может сделать вашу базу данных довольно сложной для работы с