Mysql: объединение таблиц для записей переводов - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть 2 таблицы с этой конфигурацией:

table language('id', 'language_name', 'iso_code')
table translation('id', 'language_id', 'translated_text')

В первой таблице у меня есть записи:

---------------------------------
| id | language_name | iso_code |
---------------------------------
| 1  | English       | en       |
| 2  | Espanõl       | es       |
| 3  | Français      | fr       |
---------------------------------

Второй стол:

--------------------------------------
| id | language_id | translated_text |
--------------------------------------
| 1  | 1           | Good Morning    |
| 2  | 1           | How are you?    |
| 1  | 2           | Buenos dias     |
| 2  | 3           | Comment ça va?  |
--------------------------------------

Все текстовые строки на английском языке существуют, но некоторые другие языки этого не делают.

Я хотел бы показать таблицу со ВСЕМИ текстовыми строками на английском языке и соответствующими переводами, например:

----------------------------------------
| text_id | en           | es          |
----------------------------------------
| 1       | Good Morning | Buenos dias |
| 2       | How are you? |             |
----------------------------------------

или

-------------------------------------------
| text_id | en           | fr             |
-------------------------------------------
| 1       | Good Morning | Comment ça va? |
| 2       | How are you? |                |
-------------------------------------------

Есть идеи?

1 Ответ

1 голос
/ 26 сентября 2011

Просто продолжайте делать левые соединения с той же таблицей на ИД, но с дополнительными столбцами, представляющими их язык ...

Изменено для отображения английского языка, если в соответствующих столбцах нет ни одного значения в запросе комментария.

select 
      eng.id,
      eng.translated_text InEnglish,
      coalesce( spn.translated_text, eng.translated_text ) InSpanish,
      coalesce( frn.translated_text, eng.translated_text )  InFrench
   from
      translation eng
         left join translation spn
            on eng.id = spn.id
            and spn.Language_ID = 2
         left join translation frn
            on eng.id = frn.id
            and spn.Language_ID = 3
   where
      eng.Language_id = 1
   order by 
      eng.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...