1

我有一个多语言 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 ...

但这是愚蠢的想法,是更好的方法吗?

4

1 回答 1

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这将使您不必在以后用 s使事情复杂化。

于 2012-06-10T13:48:59.840 回答