Получение меток идентификаторов

Каков наилучший способ получить метки id.

Вот проблема, с которой я столкнулся.

У меня есть много таблиц, которые содержат только идентификаторы (subject_id, level_id, place_id и т. д.).

Каков наилучший способ отобразить метки этих идентификаторов без выполнения сложного SQL-запроса при отображении (минимум 6 идентификаторов)?

Другие варианты, которые не очень приятно делать, это вызвать get_label(id,table,lang)

но, конечно, вы можете увидеть проблему для каждого столбца (Всего запросов = столбец * строки)

Есть ли лучшее решение, или я застрял без объединения 6 таблиц?

Если это поможет, я использую кохану

вот что у меня есть...

введите здесь описание изображения

и таблица тем для subject_id :

введите здесь описание изображения

У меня есть для каждого field_id таблица, соответствующая .

С точки зрения производительности, что лучше сделать соединение или просто вызвать запрос, чтобы получить конкретную метку, когда это необходимо. ?


person Tarek    schedule 04.06.2012    source источник
comment
Что вы подразумеваете под меткой идентификатора?   -  person eggyal    schedule 05.06.2012
comment
изменил мой вопрос ... поэтому вместо получения (subject_id = 3) я получил бы (химия)   -  person Tarek    schedule 05.06.2012
comment
Но эти данные находятся только в таблице тем... так что, конечно, вам придется присоединиться к таблице тем, чтобы получить их!   -  person eggyal    schedule 05.06.2012
comment
Да, я думаю, что вы застряли с соединением, но накладные расходы на это должны быть практически нулевыми, IMO.   -  person drew010    schedule 05.06.2012
comment
Насколько велики таблицы перевода? Можно ли их кэшировать в памяти?   -  person georg    schedule 05.06.2012
comment
я не могу их кэшировать, потому что они могут быть изменены в любой момент   -  person Tarek    schedule 05.06.2012
comment
@Tarek: Хорошо, можно ли сделать одну таблицу перевода (object_id, object_kind, text_en, text_fr...), например. 1, subject, Chemie, Chemistry?   -  person georg    schedule 05.06.2012


Ответы (1)


Для этого вы хотите использовать SQL JOIN.

SELECT t1.*, t2.subject_en, ...
FROM table1 t1
JOIN table2 t2 ON (t2.id = t1.subject_id)

JOIN имеет гораздо лучшую производительность - у вас есть только один запрос, который может быть должным образом оптимизирован механизмом базы данных, в то время как выполнение SELECT при повторении строк из исходного запроса даст вам n + 1 отдельных запросов.

person ThiefMaster    schedule 04.06.2012