Выборка из базы данных с логическим выраженим в условии

Magiys

Новичок
Выборка из базы данных с логическим выраженим в условии

Здраствуйте, давно тут не был, но повилась необходимость решить одну проблему:

Есть таблица, назавем ее Pages_content.
В ней находятся строки имеющие содержимое для каждой страници на нескольких языках например:


Page_id_|_Lang_id_|__Content__|
-----------------------------------
___1___ |____1___|___Text____|
-----------------------------------
___1___ |____2___|___Текст___|
-----------------------------------
___1___ |____3___|___Ertу____|
-----------------------------------
___2___ |____1___|___Text2___|
-----------------------------------
___2___ |____3___|___Ertу2___|
-----------------------------------

Есть некторый язык по умолчанию, $d_lang = 1 (английский), и есть текущий язык, то есть тот, что выбрал пользователь $current_lang = 2 (русский).

Нужно сделать так чтобы выполнялась выборка следующим образом:

====
1. Выбрать все содержимое страниц из таблицы Pages_content для текущего языка (Lang_id=2).
2. Если записи для текущего языка для какой-либо странцы не сущестует, то использовать запись для языка по умолчанию (Lang_id=1).
===

По отдельности все сделать легко, но подскажите пожалуйста, как сделать все это вместе? Возможно ли это?

Я пытался использовать логические условия IF, CASE, но я видимо не полностью представляю как они работаю и у меня ничего не получилось.

Заранее большое спасибо.
 

baev

‹°°¬•
Команда форума
Поиском воспользуйтесь.
Точно на такой вопрос уже отвечали.
 

Magiys

Новичок
Автор оригинала: baev
Поиском воспользуйтесь.
Точно на такой вопрос уже отвечали.
Да нашел ваш пост в другой теме насчет этого вопроса, сейчас посмотрю. Спасибо.

-~{}~ 06.04.07 15:02:

Нет, все равно не получает, возможно я не так делаю, вот пример, там вроде нужно сделать вложенный запрос, но в том месте он не работает:
PHP:
SELECT
    s.*, c.*, (CASE c.lang_id WHEN $current_lang THEN c.page_content ELSE 'ЗДЕСЬ_НУЖЕН_SELECT' END) as content 
FROM 
    pages_setting s, 
LEFT JOIN pages_content c ON s.id_page=c.page_id AND c.lang_id=$current_lang";
В таблице pages_setting определены свойста страниц, и перечислены все их id.
LEFT JOIN - использую для того, чтобы вернуть странцу, если даже к ней нет контента, но нужно проверит, если он для языка по умолчанию.

P.S. Что-то крутиться на уме, но не могу это выразить через запрос. :(

-~{}~ 06.04.07 15:28:

Составил вообщем такой запрос, всем спасибо:
PHP:
	SELECT 
		s.*, (CASE c.lang_id WHEN $current_lang THEN c.page_name ELSE (CASE c2.lang_id WHEN 1 THEN c2.page_name ELSE 'No name' END) END) as name
	FROM 
		pages_setting s 
	LEFT JOIN pages_content c ON 
		s.id_page=c.page_id AND 
		c.lang_id=$current_lang
	LEFT JOIN pages_content c2 ON 
		s.id_page=c2.page_id AND 
		c2.lang_id=1 
	ORDER BY s.uplevel_id, s.page_position
 
Сверху