Мне нужно локализовать результат моего запроса. Для этого у меня есть:Локализация текста MySql
- таблица
Show
сid
и некоторой другой информации; - таблица
ShowName
сidShow
,name
,lang
(для каждого шоу есть несколькоshowName
s, гдеShow.id
=ShowName.idShow
)
Мой запрос в настоящее время, и работает правильно:
select Show.*,
(SELECT name FROM ShowName
WHERE Show.id=ShowName.idShow
ORDER BY FIELD(lang,'$userPreferredLanguage','en','it','es','fr','de','pt','da','he','pl','nl','hu','no','sl', 'fi','sv','tr','cs','hr', 'el','ru','zh','ja','ko')
LIMIT 0,1) as name,
from Show
Теперь, возникает вопрос: есть ли способ немного ускорить работу? Запрос as принимает около 3 секунд, из которых 2 из них используются для вычисления внутреннего SELECT
. Я пробовал с INNER JOIN
, но я не мог понять, как опустить второй выбор. PS: обратите внимание, что ShowName
может не иметь всех локализаций, поэтому мне нужно использовать функцию FIELD
вместо простого WHERE lang = '$userPreferredLanguage'
.
Thaks заранее!
Вы возражали бы добавить свои структуры таблицы? «ORDER BY FIELD» может быть одной из причин, почему это занимает так много времени. Я понимаю, что у вас может не быть перевода для всех слов на всех языках, но действительно ли имеет смысл отображать корейский язык, когда у вас нет датского языка? Обычно у вас есть язык по умолчанию, например. английский, на который вы можете вернуться, если у вас нет термина на запрошенном языке. –