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