подскажите, как организовать выборку

gekakos

Новичок
подскажите, как организовать выборку

дано: таблица content ( id, value_ru (text), value_en (text), value_... )
и таблица portfolio (id, title (int), text (int))
поля title (int) и text (int), где определены значения на разных языках
для конкретного запроса определена локаль. скажем, ru (русский язык)

нужно сформировать такой запрос (один!) из таблицы portfolio, чтобы вместо ссылок на content id, стояли значения (value_ru в случае с русской локалью)
Код:
id  value_ru  value_en
--------------------------
1  сайт         site
--------------------------
2  текст      text  


id  title    text
-----------------------
1   1        2


на выходе будет

id  title    text
-----------------------
1   сайт   текст
предполагается, что подобных ссылок в таблице может быть сколько угодно, языков тоже.
не понимаю, как вообще такое осуществить.
когда "ссылочное" поле одно склеиваю JOIN'ом.... ну вобщем начинающий я.

суть проблемы вроде объяснил.
задачу можно упростить
content (id, value(text))
portfolio (id, title (int), text (int))

Код:
id  value
------------
1  сайт      
------------
2  текст     


id  title    text
-----------------------
1   1        2


на выходе будет

id  title    text
-----------------------
1   сайт   текст
прошу помощи!
 

zerkms

TDD infected
Команда форума
вообще ты пошёл уже неправильным путём. поищи - вопрос многоязычных приложений обсуждался миллион раз.

ps: а то, что тебе нужно, делается через INNER JOIN.
 

gekakos

Новичок
вообще ты пошёл уже неправильным путём. поищи - вопрос многоязычных приложений обсуждался миллион раз.
да, я конечно боюсь изобрести велосипед. но подход, при котором все "мультиязычные" данные хранятся в одной таблице имхо очень удобен.
чтобы добавить новый язык нужно всего лишь добавить соотв столбец. выборка по проиндексированным ссылкам тоже быстрая. не понимаю, что тут не правильного? (я обычно следую своему разуму, а не общему мнению)

ps: а то, что тебе нужно, делается через INNER JOIN.
об этом хотелось бы узнать подробней =) не для велосипеда, так в образовательных целях
 

zerkms

TDD infected
Команда форума
да, я конечно боюсь изобрести велосипед. но подход, при котором все "мультиязычные" данные хранятся в одной таблице имхо очень удобен.
если бы у тебя был подход удобнее - то ты бы не пришёл сюда с вопросом.

чтобы добавить новый язык нужно всего лишь добавить соотв столбец. выборка по проиндексированным ссылкам тоже быстрая. не понимаю, что тут не правильного? (я обычно следую своему разуму, а не общему мнению)
неправильного - нормализация. "выборка по проиндексированным ссылкам тоже быстрая" - ну вот и выбери - повторюсь, зачем тогда вопрос - если всё просто и быстро?

об этом хотелось бы узнать подробней
dev.mysql.com, раздел о SELECT + какая-нибудь книжка по sql (например от М. Грубера)
 

gekakos

Новичок
zerkms, какой-то пустой диалог получается. Вы не знаете, как сделать такую выборку и говорите, что это не целесообразно, я - просто не знаю как сделать ее, потому что не силен в sql.
Хотелось бы какой-нибудь осознанный ответ, типа "этот запрос будет тормозить при большом количестве переводимых полей, потому что...., советую построить систему так..." или "запрос делается так ...."
 

zerkms

TDD infected
Команда форума
gekakos
я тебе сказал как нужно делать. ты сказал - что это сложно.
мне встать на колени и умолять?
 

gekakos

Новичок
>> я тебе сказал как нужно делать.
да, еще бы сказал, что руками =)
>> ты сказал - что это сложно.
где я такое говорил? О_о

P.S. теперь я понимаю, откуда у юзеров по 3000 сообщений на форуме :D
 

zerkms

TDD infected
Команда форума
gekakos
вообще ты пошёл уже неправильным путём. поищи - вопрос многоязычных приложений обсуждался миллион раз.
что именно тут непонятно? особенности разработки мультиязычных приложений обсуждаются раз в месяц достаточно подробно.

P.S. теперь я понимаю, откуда у юзеров по 3000 сообщений на форуме
угу. ты мог пойти в поиск после первого моего сообщения. но ты вынудил написать их ещё 3 штуки. отсюда и тысячи ненужных постов на форуме.
 

gekakos

Новичок
я сейчас читаю про разработку мультиязычных приложений.
предлагают разные варианты.
да, мой вариант подходит только для контента, общего для всех языков.
составить запрос с подменой (ключ -> значение по ключу в другой таблице) невозможно???

когда поле одно и таблица portfolio выглядит так portfolio (id, text (int)), я делаю:

[sql]SELECT `portfolio`.`id`,`content`.`value` `text` FROM `portfolio` INNER JOIN `content` ON `portfolio`.`text` = `content`.`id` WHERE 1[/sql]

если portfolio (id, title (int), text (int))
хочется сделать так

[sql]
SELECT `portfolio`.`id`,`content`.`value` `title`, `content`.`value` `text`.... [/sql]

уже ясно, что поля с одиноковыми именами... как объяснить в запросе, что первое `content`.`value` соотв. `portfolio`.`title` = `content`.`id` а второе соотв. - `portfolio`.`text` = `content`.`id`
 

prolis

Новичок
таблицы (и столбцы) могут в запросе иметь свои псевдонимы, например:
select t1.id FieldOne, t2.id FieldTwo from table t1,table t2 where t1.id=t2.id
здесь FieldOne, FieldTwo, t1 и t2 - псевдонимы
 

gekakos

Новичок
спасибо, псевдонимы помогли! я знал про них, но не допер, что можно, называя по-разному одну и ту же таблицу, юзать связки
 
Сверху