我在数据库中创建了一个表格进行翻译。该表的结构如下所示:
TranslationId |栏位名称| FieldValue | LanguageId
通过查询,我选择了所需WSA_FLAG_OVERLAPPED
的所有翻译,该翻译返回一个包含行的数组。现在,我想在某些地方在此数组中使用LanguageId
,但是如何基于FieldValues
得到正确的FieldValue
?
例如,在标头中,我需要FieldName
' Header.Title '的FieldValue
。如何从SQL结果中获得特定的FieldName
?
仅循环打印每个FieldValue
和FieldName
会很容易,但是我需要在特定位置进行特定翻译。
更新: 谢谢亚伯拉!这样就可以正常工作了:
FieldValue
返回所需的结果。
答案 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