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.
Пытаюсь разобраться с интернационализацией.
[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.