двуязычная выборка

Rynor

stay hungry
двуязычная выборка

уважаемые, что-то не соображу
есть 2 таблицы для 2-язычного проекта
table t:
id
....

table_nls t2:
parent (=t.id)
nls (1 для русского, 2 для англ. и т.д.)
title (название)
.....

то есть родительская с основными свойствами и i18n дитё со строками, названием товара

100 товаров = 100 названий на русском + 10 на английском (дублируют соответствующие русские)

мне нужно выбрать 100 (ни одним более) названий этих 100 товаров одним запросом по извращённому (таковы реалии) алгоритму: если есть английское название, берем его, иначе - русское.

вот эта выборка, само собой, выдаёт все 110 записей:
SELECT t2.title FROM table t, table_nls t2 WHERE t.id=t2.parent ORDER BY nls;
что нужно добавить, не могу сообразить
JOIN здесь, имхо, не катит, так как будет избыточная выборка с нулами
GROUP BY отрубает все английские

Что же делать, помогите, пожалуйста. Пошел пробовать дальше. Заранее благодарю за помощь!
 

Popoff

popoff.donetsk.ua
я у себя такую задачу так и не придумал как решить. только у меня немножко сложнее: у меня не два языка, а много; порядок поиска записей в случае отсутствия перевода на нужный язык определяется содержимым дополнительной таблицы.

пока делаю в лоб: сначала выбираю все строки с предпочитаемым языком запросом типа такого:
SELECT t.id,t2.title FROM table t left join table_nls t2 on t2.nls=1 and t.id=t2.parent;

а потом - для тех строк, для которых нет перевода - ищу переводы на другие языки. идентификатор записи берется из результата первого запроса, а проверка, есть ли перевод - содержимым поля title.

что бы избавиться от запросов в цикле в твоем случае можно сформировать условие с использованием in типа такого:
SELECT t2.parent,t2.title FROM table_nls t2 where t2.nls=2 and t2.parent in (1,2,5,12);

но лично я все же делаю запросы в цикле, а что бы избежать излишней нагрузки, результат всей выборки записываю в самодельный кеш :)
 

Serguitar

Новичок->продвинутый
если есть английское название, берем его, иначе - русское.
Почему бы не добавить ещё одно поле в таблицу, куда и будешь записывать эквивалент русскому названию.
При запросе проверяешь, если английский эквивалент в строке есть-берём его, нету, берем русский.
 

Serguitar

Новичок->продвинутый
Popoff
Да, но заметь, в его вопросе звучит именно два языка.
У тебя сложнее. Подумать надо...
Хотя в принципе, если вопрос непринципиален, можно сколько хочешь полей в таблицу добавить.;-)
 

Rynor

stay hungry
Popoff спасибо за совет, попробую

Serguitar
языков млжет быть и больше, я же написал "и т.д." :)
поля добавить не проблема, я спрашивал про выход с имеющейся структурой, думал, что торможу с запросом, похоже - нет :)
 
Сверху