Я создал таблицу в своей базе данных для переводов. Структура таблицы выглядит следующим образом:
TranslationId | FieldName | FieldValue | LanguageId
Запросом выбираю все переводы для нужного LanguageId
, что возвращает массив со строками. Теперь я хочу использовать FieldValues
в этом массиве в определенных местах, но как мне получить правильный FieldValue
на основе FieldName
?
Так, например, в заголовке мне нужно FieldValue
из FieldName
'Заголовок.Название'. Как я могу получить этот конкретный FieldValue
из моего результата SQL?
Было бы легко просто напечатать все FieldName
и FieldValue
с циклом, но мне нужны конкретные переводы в определенных местах.
Обновлять: Спасибо Абра! Заработало теперь так:
while($row = mysqli_fetch_assoc($result))
{
$values[$row['FieldName']] = $row['FieldValue'];
}
echo $values['Header.Title'];
возвращает желаемый результат.
Лучшим решением было бы создать отдельную таблицу для каждой идиомы и выполнить соединение по WordId. Что-то вроде: "TablePortuguese as P INNER JOIN TableEnglish as E on P.WordId = E.WordId"
Ты сдался?
Предполагая, что вы уже извлекли результаты в массив $rows
, просто извлеките FieldValue
в массив, проиндексированный FieldName
:
$values = array_column($rows, 'FieldValue', 'FieldName');
Затем используйте FieldName
в качестве ключа:
echo $values['Header.Title'];
Вы не указали API базы данных, но если вы создаете свой собственный массив из цикла, сделайте это вместо этого:
while($row = $result->fetch_assoc()) {
$values[$row['FieldName']] = $row['FieldValue'];
}
Затем используйте его таким же образом.
Как вы могли знать ответ на этот вопрос без каких-либо подробностей @AbraCadaver? Это много предположений.
Мне это кажется довольно понятным. Не «лучший» вопрос, но достаточно подробностей.
Должно быть, я что-то упускаю тогда. В нынешнем виде этот вопрос слишком широк, не требует усилий, не имеет MCVE.
Превосходно! Рад, что вы поняли ситуацию и направили меня в правильном направлении. У меня сейчас работает, с небольшим изменением.
Рад слышать это. Что было мелочью?
Я обновил исходный вопрос с окончательным результатом.
Другим решением было бы создать отдельную таблицу для каждой идиомы и выполнить соединение с помощью WordId
. Если вы используете MySql, как я думаю, вы можете использовать приведенный ниже код, чтобы сделать это.
Создайте таблицу для каждой идиомы:
CREATE TABLE `english` (
`WordId` int(11) NOT NULL AUTO_INCREMENT,
`Word` varchar(30) NOT NULL,
`Synonym` varchar(30) NOT NULL,
PRIMARY KEY (`WordId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `portuguese` (
`WordId` int(11) NOT NULL AUTO_INCREMENT,
`Word` varchar(30) NOT NULL,
`Synonym` varchar(30) NOT NULL,
PRIMARY KEY (`WordId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Найдите слово перевод и его синоним по id:
SELECT E.Word, E.Synonym, P.WordId, P.Word FROM english AS E INNER JOIN portuguese AS P ON E.WordId = P.WordId
Честно говоря, нам не хватает, чтобы продолжать. Нам нужно будет увидеть данные вашей таблицы и пример ожидаемого результата, тогда мы сможем лучше помочь.