Mysql 从表中获取列值作为sql查询结果中的键
我的表格结构如下:Mysql 从表中获取列值作为sql查询结果中的键,mysql,sql,symfony,doctrine-orm,Mysql,Sql,Symfony,Doctrine Orm,我的表格结构如下: name grade a 10 b 8 c 9 我正在编写一个查询,用于选择成绩大于7的行,并希望得到这种格式的结果 { a: {grade: 10}, b: {grade: 8}, c: {grade: 9} } 这是我的问题 createQueryBuilder() ->select('x.name, x.grade as grade') ->
name grade
a 10
b 8
c 9
我正在编写一个查询,用于选择成绩大于7的行,并希望得到这种格式的结果
{
a: {grade: 10},
b: {grade: 8},
c: {grade: 9}
}
这是我的问题
createQueryBuilder()
->select('x.name, x.grade as grade')
->from('gradesTable', 'x')
->where('x.grade > :threshold')
->setParameter('threshold', 7)
->getQuery()
->getResult();
有人可以帮忙吗?您可以使用MySQL的concat函数生成所需的输出,例如:
select concat (name, ": {grade:", grade, "}")
from test
where grade > 8;
“from”函数有第三个参数indexBy。这就是你要找的。您的查询应该如下所示
....->createQueryBuilder()
->select('x.name, x.grade as grade')
->from('gradesTable', 'x', 'x.name')
->where('x.grade > :threshold')
->setParameter('threshold', 7)
->getQuery()
->getResult();
结果会是这样
{
a: {name: a, grade: 10},
b: {name: b, grade: 8},
c: {name: c, grade: 9}
}
不要从查询中删除该名称。如果您不选择它,它将不起作用。
希望这有帮助
快乐编码
亚历山德鲁·科索尝试:
createQueryBuilder()
->select('x.name, x.grade as grade')
->from('gradesTable', 'x')
->where('x.grade > :threshold')
->setParameter('threshold', 7)
->indexBy('x', 'x.name')
->getQuery()
->getResult();
或:
(或接受答案:))
使用createQuery()函数时,您还可以使用:
createQuery('SELECT x.name, x.grade as grade FROM gradesTable x INDEX BY x.name');
您使用的是哪种原则?我不知道第三个参数,事实上,它在createQueryBuilder
函数中也起作用+1.
createQuery('SELECT x.name, x.grade as grade FROM gradesTable x INDEX BY x.name');