@ NicolaUetz Я согласен с @HoneyboyWilson, с вашими текущими структурами таблиц единственный способ сделать это sh - это с помощью Dynami c sql.
Я знаю, что это не тот ответ, который вы искали, но вместо того, чтобы попытаться сделать что-то ненормальное, чтобы заставить это работать, если это возможно, я бы настоятельно рекомендовал изменить структуру ваших таблиц. Я бы изменил таблицу translations
на 3 столбца:
language
| key
| translation
, где язык является внешним ключом к столбцу language
в таблице languages
, key
- это слово для перевода, а translation
- это перевод это слово в язык.
Вот код для создания таких таблиц и заполнения их данными:
CREATE TABLE `languages` (`language` TEXT, `title` TEXT);
CREATE TABLE `translations` (`language` TEXT, `key` TEXT, `translation` TEXT);
INSERT INTO `languages` (`language`, `title`)
VALUES
('de_de', 'German'),
('en_gb', 'English');
INSERT INTO `translations` (`language`, `key`, `translation`)
VALUES
('de_de', 'hello', 'Hallo!'),
('en_gb', 'hello', 'Hello!'),
('de_de', 'bye', 'Tschuss!'),
('en_gb', 'bye', 'Bye!'),
('de_de', 'what', 'Was?');
А вот запрос, который вы запустите, чтобы получить результаты, которые вы ищете:
SELECT `a`.`language`,
`a`.`title`,
COUNT(`t`.`translation`) AS `translated`
FROM `languages` AS `a`
LEFT JOIN `translations` AS `t` ON `t`.`language` = `a`.`language`
GROUP BY `a`.`language`, `a`.`title`;
Вот пример для db-fiddle;
Этот подход является лучшим примером того, как таблицы реляционной базы данных должны быть настроены относительно друг друга.
Если невозможно изменить структуру таблицы, то Dynami c sql является единственным вариантом.
Надеюсь, это поможет.