Выбрать из связанной таблицы одну строку, если нет, то с другим условием

Dreammaker

***=Ф=***
Выбрать из связанной таблицы одну строку, если нет, то с другим условием

Пытаюсь разобраться с интернационализацией.
[sql]
CREATE TABLE IF NOT EXISTS `table` (
`id` int(11) NOT NULL,
`name` char(25) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



CREATE TABLE IF NOT EXISTS `table_i18` (
`id` int(11) NOT NULL,
`description` char(255) CHARACTER SET utf8 NOT NULL,
`lang` char(5) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`tablei18nid` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `table` (`id`, `name`) VALUES
(1, 'name1'),
(2, 'name2');

INSERT INTO `table_i18` (`id`, `description`, `lang`, `tablei18nid`) VALUES
(1, 'description 1 en', 'en_us', 1),
(2, 'описание 1 ру', 'ru_ru', 1),
(3, 'опис 1 уа', 'ua_ua', 1),
(4, 'description 2 en', 'en_us', 2),
(5, 'опис 2 уа', 'ua_ua', 2);
[/sql]
В таблице table - посты со своими id, в таблице table_i18n переведённые описания с идентификаторами языка.

Вот таким запросом мы получаем данные для поста номер 2 и с языком en_us

[sql]
SELECT * FROM `table`, `table_i18n` WHERE `table_i18n`.`tablei18nid` = `table`.id AND `table_i18n`.`lang` = 'en_us' AND `table`.id = 2
[/sql]
Вопрос: можно ли как-то выбирать одним запросом описания из второй таблицы по требуемому языку, а если нет описания на нужном языке, то выбирать запись на языке по умолчанию (en_us). Для поста номер 2 таким отсуствующим языком является ru_ru.
 

dimagolov

Новичок
делаешь left join для нужного языка и еще left join для en, а потом в результатах выбираешь нужное поле через IF
 

Dreammaker

***=Ф=***
Спасибо.

Вот такое вот заработало:

[sql]
SELECT IF (it.id IS NULL, `table_i18n`.description, it.description) as description FROM `table_i18n` LEFT JOIN `table` ON `table_i18n`.`tablei18nid` = `table`.`id` AND `table_i18n`. `lang` = 'en_us' LEFT JOIN `table_i18n` it ON `table`.`id` =it.`tablei18nid` AND it. `lang` = 'ru_ru' WHERE `table`.`id` = 2
[/sql]

Теперь буду думать, как это всё засунуть в ORM в Yii :)
 

Fortop

Новичок
Dreammaker
прямо запросом и вставляешь. Там же есть вроде такая возможность.
 

Dreammaker

***=Ф=***
Fortop, да, можно через DAO, если я правиально понял о чём речь идёт, но хотелось бы через модели, впрочем, это не слишком обязательно, если нет, то запросами сделаю.
 
Сверху