powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мультиязычная таблица
8 сообщений из 8, страница 1 из 1
Мультиязычная таблица
    #39668276
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть простая таблица Users:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE `Users` (
  `ID` int(18) NOT NULL AUTO_INCREMENT,
  `NAME_RU` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `LAST_NAME_RU` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `NAME_EN` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `LAST_NAME_EN` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB;



можно ли создать для неё такое представление, чтоб в коде можно было обратиться примерно так:

Код: php
1.
$queryStr = 'select NAME, LAST_NAME from Users_view';



и получить значения колонок, в зависимости от языка.. ?

Или есть другие варианты получить значения в зависимости от языка?
...
Рейтинг: 0 / 0
Мультиязычная таблица
    #39668293
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дормедонт Евлампиевичи получить значения колонок, в зависимости от языка.. ?
А где он задаётся, язык-то?

Дормедонт Евлампиевичможно ли создать для неё такое представление
А чего нет-то?
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE VIEW mui_isers
AS
  SELECT id, name_ru name, last_name_ru last_name, 'RU' language
  FROM users
UNION ALL
  SELECT id, name_en name, last_name_en last_name, 'EN' language
  FROM users

Хотя разумнее переделать нафиг структуру таблицы.
...
Рейтинг: 0 / 0
Мультиязычная таблица
    #39668295
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Алиасы во втором подзапросе удалить - я что-то отвлёкся...
...
Рейтинг: 0 / 0
Мультиязычная таблица
    #39668313
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА где он задаётся, язык-то?
Задаётся в сессионной переменной:
Код: sql
1.
set @lang='RU';



AkinaА чего нет-то?
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE VIEW mui_isers
AS
  SELECT id, name_ru name, last_name_ru last_name, 'RU' language
  FROM users
UNION ALL
  SELECT id, name_en name, last_name_en last_name, 'EN' language
  FROM users

Хотя разумнее переделать нафиг структуру таблицы.
Надо значения только на указанном языке, а не на всех. Т.е. если @lang ='RU', то в виртуальной колонке NAME должно быть значение из NAME_RU

И желательно, чтобы можно было апдейтить вьюшку
...
Рейтинг: 0 / 0
Мультиязычная таблица
    #39668323
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дормедонт ЕвлампиевичЗадаётся в сессионной переменной:
Код: sql
1.
set @lang='RU';


Представления не могут ссылаться на пользовательские переменные.

Дормедонт Евлампиевичжелательно, чтобы можно было апдейтить вьюшку
Представление может быть только заменено на новое (CREATE OR REPLACE VIEW), корректировка не предусмотрена.
...
Рейтинг: 0 / 0
Мультиязычная таблица
    #39668330
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaПредставление может быть только заменено на новое (CREATE OR REPLACE VIEW), корректировка не предусмотрена.
имел ввиду update Users_view set...

AkinaПредставления не могут ссылаться на пользовательские переменные.
так понимаю, это ставит крест на данном подходе..
...
Рейтинг: 0 / 0
Мультиязычная таблица
    #39668342
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дормедонт Евлампиевичтак понимаю, это ставит крест на данном подходе..
На именно данном - да.

Могу предложить написать процедуру, которая принимает указатель языка и создаёт временную таблицу с данными для указанного языка, которая может повторно использоваться, пока не будет закрыто соединение. Либо возвращает набор записей для указанного языка (процедуры, в отличие от представлений, вполне себе могут общаться с пользовательскими переменными).
...
Рейтинг: 0 / 0
Мультиязычная таблица
    #39668434
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для таблиц с мультиязычными колонками я использую простую процедуру (функцию), которая по-сути делает if-else if-else...
в зависимости от установки тек.языка.

Например, select ..., функция(поле_RU,поле_UA,поле_EN,...), ... FROM ...
А в функции
...
set name=IF @lang='RU' then .... else ... endif
...

Громоздко и некрасиво, но работает...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мультиязычная таблица
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]