MySQL IF условия и интернационализация - PullRequest
1 голос
/ 21 июля 2010

Мне интересно следующее, запрос ниже выберет соответствующие поля, если установлен язык.

Первый вопрос, мне нужны поля, заголовок, ключевые слова и описание из таблицы страниц или, еслиязык соответствует, и поле не является нулевым в таблице page_langs.Теперь я делаю это с тремя операторами IF, возможно ли сделать это за один IF?

Ниже работает запрос, и возвращаемый массив выглядит примерно так:

Array ( [0] => Array ( [Page] => Array ( [id] => 2 [lft] => 2 [rght] => 7 ) [0] => Array ( [title] => Welcome [keywords] => welcome [description] => welcome ) ) ) 

Итак,id, lft и rght находятся «внутри массива Page (-> pages AS)», заголовок, ключевые слова и описание находятся вне массива Page, имеет смысл, конечно, но как мне получить эти три поля в массиве Page,поэтому я могу использовать arr [Page] [title], чтобы получить заголовок вместо arr [0] [title]?

$sql = "SELECT Page.id, Page.lft, Page.rght, 
                IF (STRCMP(Lang.title, '') AND 
                    !STRCMP(Lang.langident, '{$lang}'), Lang.title, Page.title) AS title,
                IF (STRCMP(Lang.keywords, '') AND 
                    !STRCMP(Lang.langident, '{$lang}'), Lang.keywords, Page.keywords) AS keywords,
                IF (STRCMP(Lang.description, '') AND 
                    !STRCMP(Lang.langident, '{$lang}'), Lang.description, Page.description) AS description
            FROM pages AS Page 
                LEFT JOIN page_langs AS Lang
            ON Lang.parent_id = Page.id AND Lang.langident = '{$lang}'
                WHERE Page.id = {$id}"

Любая помощь (предложения по запросу, возможно?) приветствуется.

1 Ответ

0 голосов
/ 21 июля 2010

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

Если перевод есть, он будет правильным языком сразу.Если правильный язык отсутствует, он будет НЕДЕЙСТВИТЕЛЕН, следовательно, достаточно COALESCE().

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