需要基于其他列值的SQL结果中的列值

时间:2019-04-05 18:49:44

标签: php arrays database

我在数据库中创建了一个表格进行翻译。该表的结构如下所示:

  

TranslationId |栏位名称| FieldValue | LanguageId

通过查询,我选择了所需WSA_FLAG_OVERLAPPED的所有翻译,该翻译返回一个包含行的数组。现在,我想在某些地方在此数组中使用LanguageId,但是如何基于FieldValues得到正确的FieldValue

例如,在标头中,我需要FieldName' Header.Title '的FieldValue。如何从SQL结果中获得特定的FieldName

仅循环打印每个FieldValueFieldName会很容易,但是我需要在特定位置进行特定翻译。

更新: 谢谢亚伯拉!这样就可以正常工作了:

FieldValue

返回所需的结果。

2 个答案:

答案 0 :(得分:1)

假设您已经将结果提取到数组$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'];
}

然后以相同的方式使用它。

答案 1 :(得分:0)

另一种解决方案是为每个习语创建一个分隔表,并通过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