Локализация записей в mysql-таблице

ggfdsfds

Новичок
Добрый вечер.

Нашел два способа проводить переводы записей в таблице:
1. первый способ - создать отдельную таблицу и в нее писать переводы
2. второй способ - вести локализацию на базе одной таблицы (родительская запись и дочерние записи - это переводы на другие языки)

Но оба этих варианта не совсем подходят - хотя бы потому что не получается составить запрос на подсчет кол-ва COUNT() - записей-переводов.

Как еще можно организовать локализацию записей?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ggfdsfds, что значит не получается составить запрос? Запрос вида SELECT COUNT(id) as num_translations FROM table WHERE parent_id=xxx не работает?

И вообще хранение переводов довольно-таки специфичное дело и может быть реализовано многими способами в зависимости от задания, которого мы не наблюдаем ;)
 

ggfdsfds

Новичок
Вот пример:

И как здесь уже можно сделать COUNT?
А как делать наложения переводов?
Может быть можно как-то через Join?
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
А какой смысл в записи "по умолчанию" без контекста?

Есть некоторая разница между выводом русскоязычной надписи украинцу и англичанину. Да и даже если это не принимать во внимание, удобнее просто один из языков определить "базовым".
 

ggfdsfds

Новичок
А какой смысл в записи "по умолчанию" без контекста?

Есть некоторая разница между выводом русскоязычной надписи украинцу и англичанину. Да и даже если это не принимать во внимание, удобнее просто один из языков определить "базовым".
По умолчанию - имеется в виду - базовый язык - русский.
 

artoodetoo

великий и ужасный
PHP:
SELECT ifnull(b.title, a.title) AS title
FROM
  mytable AS a LEFT JOIN
  mytable AS b ON b.orig_id = a.id AND b.lang_id=2
WHERE a.id=7
http://sqlfiddle.com/#!2/52399/2
используется внешнее соединение, поэтому b.title может быть равной NULL. в таком случае будет использован "оригинальный" язык.

или смотрим сколько переводов есть у каждой "оригинальной" фразы
PHP:
SELECT a.id, COUNT(b.id) AS bcount
FROM
  mytable AS a LEFT JOIN
  mytable AS b ON b.orig_id=a.id
WHERE a.lang_id=0
GROUP BY a.id
http://sqlfiddle.com/#!2/52399/1
если добавить …HAVING COUNT(b.id) < 2 , то получим только те строки, для которых заданы не все переводы
 
Последнее редактирование:
Сверху