2016-09-19 124 views
1

我有一个表结构 -从表中获取的列值从SQL查询的结果键

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

有人能帮助呢?

+0

您正在使用哪个原则? – Nebi

回答

2

的“从”功能有一个名为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} 
} 

不要从查询中删除名称。如果你不选择它,它将不起作用。 希望这有助于。

快乐编码,

亚历Cosoi

+0

作品的魅力 – madhur

+0

确实不知道第三个参数,它也在'createQueryBuilder'函数中工作。 +1 – COil

0

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

select concat (name, ": {grade:", grade, "}") 
from test 
where grade > 8; 
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');