Сложное соединение MySQL с заменой столбцов - PullRequest
0 голосов
/ 08 ноября 2011

Таблица с информацией о содержимом - content:

+----------+-------------+-------------------+--------------------------------+
| (int) id | (int) title | (int) description | (string) tags                  |
+----------+-------------+-------------------+--------------------------------+
|        1 |          12 |                18 | super, awesome, must-see       |
+-----------------------------------------------------------------------------+
|        4 |          25 |                26 | randomness, funny-stuff, cool  |
+-----------------------------------------------------------------------------+

Таблица с информацией о переводе - translations:

+-----------+---------------------------------+----------------+
| (int) tid | (text) value                    | (varchar) code |
+-----------+---------------------------------+----------------+
|        12 | Super-awesome-mustsee           | en             |
+--------------------------------------------------------------+
|        18 | <here would be the description> | en             |
+--------------------------------------------------------------+
| <more translation data that is not necessary for this xmpl.> |
+--------------------------------------------------------------+

То, чего я хочу добиться, это заменить content.title на translations.value и то же самое для описания (больше / меньше данных для разных таблиц компонентов (content)) , где content.title соответствует translations.tid, вроде:

+----------+-----------------------+---------------------------------+--------------------------------+
| (int) id | (text) title          | (text) description              | (string) tags                  |
+----------+-----------------------+---------------------------------+--------------------------------+
|        1 | Super-awesome-mustsee | <here would be the description> | super, awesome, must-see       |
+-----------------------------------------------------------------------------------------------------+

Пока что мне нужно объединить данные перевода только для одного значения ... И да, присоединение не заменит. : |

SELECT  `content` . * ,  `translations`.value
FROM  `content` 
JOIN  `translations` ON  `translations`.tid =  `content`.title
WHERE  `translations`.code =  'en'

Как мне этого добиться?

Заранее спасибо!

1 Ответ

2 голосов
/ 09 ноября 2011

Не так сложно:

SELECT
    `c`.`id`,
    `tt`.`value` AS title,
    `td`.`value` AS description,
    `c`.`tags`
FROM
    `content` `c`
LEFT JOIN 
    `translations` `tt` ON  (`tt`.`tid` = `c`.`title` AND `tt`.`code` = 'en')
LEFT JOIN 
    `translations` `td` ON  (`td`.`tid` = `c`.`description` AND `td`.`code` = 'en')

В основном вам нужно удалить * и указать точные столбцы и их псевдонимы из объединенных таблиц. Во-вторых, вам нужно создать двойное соединение на одной и той же таблице, одно для получения перевода заголовка, второе для получения описания. Чтобы «заменить» его в результате, просто используйте псевдоним для столбца value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...