Нужно значение столбца из результата sql на основе другого значения столбца - PullRequest
0 голосов
/ 05 апреля 2019

Я создал таблицу в моей базе данных для переводов.Структура таблицы выглядит следующим образом:

TranslationId |FieldName |FieldValue |LanguageId

С помощью запроса я выбираю все переводы для желаемого LanguageId, который возвращает массив со строками.Теперь я хочу использовать FieldValues в этом массиве в некоторых местах, но как мне получить FieldValue на основе FieldName?

Так, например, в заголовке мне нужен FieldValue из FieldName ' Header.Title '.Как я могу получить этот конкретный FieldValue из моего результата SQL?

Было бы просто напечатать каждый FieldName и FieldValue с циклом, но мне нужны конкретные переводы в определенных местах.

Обновление: спасибо, Абра!Теперь все работает так:

while($row = mysqli_fetch_assoc($result)) 
{
    $values[$row['FieldName']] = $row['FieldValue'];
}

echo $values['Header.Title'];

возвращает желаемый результат.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Предполагая, что вы уже извлекли результаты в массив $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'];
}

Затем используйте еготак же.

0 голосов
/ 05 апреля 2019

Другое решение - создать отдельную таблицу для каждой идиомы и выполнить объединение с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...