1

多言語のcmsのテーブルがあり、すべての言語からテーブルを選択するにはUNION SELECTが必要です。とにかく、現在の行をwitchテーブルから定義するのですか?このようなもの:

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

注意すべき2つのこと:クエリで使用SELECT *することは賢明ではありません。UNION代わりに列について明示してください。そうすれば、列の順序は決定論的です。

SELECT
  col1,
  col2,
  'en' AS lang
FROM en_table
UNOIN ALL
  col1,
  col2,
  'fa' AS lang
FROM fa_table

次に、可能であれば、長期的には、これらすべてのテーブルを1つにまとめて、言語を識別する列を含める必要があります。UNIONこれにより、後でsを使用して物事を複雑にする必要がなくなります。

于 2012-06-10T13:48:59.840 に答える