Нужно значение столбца из результата sql на основе другого значения столбца

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

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'];

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

Честно говоря, нам не хватает, чтобы продолжать. Нам нужно будет увидеть данные вашей таблицы и пример ожидаемого результата, тогда мы сможем лучше помочь.

Jay Blanchard 05.04.2019 20:52

Лучшим решением было бы создать отдельную таблицу для каждой идиомы и выполнить соединение по WordId. Что-то вроде: "TablePortuguese as P INNER JOIN TableEnglish as E on P.WordId = E.WordId"

Fellipe Sanches 05.04.2019 21:02

Ты сдался?

AbraCadaver 16.04.2019 16:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
37
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Предполагая, что вы уже извлекли результаты в массив $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? Это много предположений.

Jay Blanchard 05.04.2019 20:53

Мне это кажется довольно понятным. Не «лучший» вопрос, но достаточно подробностей.

AbraCadaver 05.04.2019 20:54

Должно быть, я что-то упускаю тогда. В нынешнем виде этот вопрос слишком широк, не требует усилий, не имеет MCVE.

Jay Blanchard 05.04.2019 20:56

Превосходно! Рад, что вы поняли ситуацию и направили меня в правильном направлении. У меня сейчас работает, с небольшим изменением.

MNL 05.04.2019 21:15

Рад слышать это. Что было мелочью?

AbraCadaver 05.04.2019 21:22

Я обновил исходный вопрос с окончательным результатом.

MNL 06.04.2019 11:22

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

Другие вопросы по теме