从表中获取列值作为sql查询结果中的键

时间:2016-09-19 08:44:31

标签: 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')
        ->from('gradesTable', 'x')
        ->where('x.grade > :threshold')
        ->setParameter('threshold', 7)
        ->getQuery()
        ->getResult();

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

'from'函数有一个名为indexBy的第三个参数。 Tha就是你要找的。您的查询应该是这样的。

....->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}
}

请勿从查询中删除该名称。如果您不选择它,它将无法工作。 希望这会有所帮助。

快乐编码,

Alexandru Cosoi

答案 1 :(得分:1)

尝试:

createQueryBuilder()
    ->select('x.name, x.grade as grade')
    ->from('gradesTable', 'x')
    ->where('x.grade > :threshold')
    ->setParameter('threshold', 7)
    ->indexBy('x', 'x.name')
    ->getQuery()
    ->getResult();

或者:

createQueryBuilder('gradesTable', 'x', 'x.name')
    ->select('x.name, x.grade as grade')
    ->where('x.grade > :threshold')
    ->setParameter('threshold', 7)
    ->getQuery()
    ->getResult();

(或接受回答:))

使用createQuery()功能时,您还可以使用:

createQuery('SELECT x.name, x.grade as grade FROM gradesTable x INDEX BY x.name');

答案 2 :(得分:0)

您可以使用MySQL的concat函数生成所需的输出,例如:

select concat (name, ": {grade:", grade, "}")
from test 
where grade > 8;