我在多语言cms中有一个表,我需要一个UNION SELECT来从所有语言中选择表,无论如何我定义当前行来自女巫表?像这样的东西:
SELECT *,lan=en FROM en_table UNION SELECT *,lan=fa FROM fa_table ...
我知道我可以使用它:
SELECT *,(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'db' AND TABLE_NAME = 'en_table' LIMIT 1) As lan FROM en_table UNION ...
但这是一个愚蠢的想法,这是更好的方法吗?
答案 0 :(得分:1)
使用单引号括起来的字符串文字,别名如下:
SELECT
*,
/* string literal 'en' */
'en' AS lang
FROM en_table
UNOIN ALL
*,
/* string literal 'fa' */
'fa' AS lang
FROM fa_table
需要注意两点:在SELECT *
查询中使用UNION
是不明智的。请改为明确列,因此它们的顺序是确定性的。
SELECT
col1,
col2,
'en' AS lang
FROM en_table
UNOIN ALL
col1,
col2,
'fa' AS lang
FROM fa_table
然后,如果可能的话,从长远来看,您应该将所有这些表合并为一个,其中包括一个标识语言的列。这将使您不必在以后使用UNION
复杂化。