Я использую таблицу для сохранения некоторых текстовых данных с такой структурой:
CREATE TABLE IF NOT EXISTS `strings_en` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`content` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
В этой таблице хранятся все английские "строки" (на самом деле это текст, который иногда длиннее 4 КБ). Когда мне нужна строка, я вызываю mySQL так:
SELECT `content` FROM `strings_en` WHERE `id`='42'
Теперь я "интернационализировал" свое приложение, поэтому я добавил другие таблицы, называемые "strings_es" или "strings_de", в которых используются испанский и голландский языки. Каждый идентификатор всегда соответствует одной и той же строке на разных языках.
В PHP у меня есть переменная $ language , которая содержит текущий выбранный язык: 'es' для испанского, 'en' для английского и т. Д. Я получаю строку с этим запросом:
SELECT `content` FROM `strings_$language` WHERE `id`='$string'
Проблема в том, что иногда нет перевода для данного идентификатора (этот идентификатор не существует в таблице). Например, в испанском языке не существует id = 10 (strings_es), но он существует на английском языке (strings_en). Я использую * strings_en * как по умолчанию , поэтому, когда строка не существует на текущем языке, я ищу на английском. Теперь я делаю это через условное выражение PHP:
$result = query("SELECT `content` FROM `strings_$language` WHERE `id`='$string'");
if (empty($result)) {
$result = query("SELECT `content` FROM `strings_en` WHERE `id`='$string'");
}
Я хотел бы знать, как сделать это только в одном запросе MySQL.