【问题标题】:getting a column value from table as keys in result from sql query从表中获取列值作为 sql 查询结果中的键
【发布时间】:2016-09-19 08:44:31
【问题描述】:

我有一个表结构 -

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 sql symfony doctrine-orm


【解决方案1】:

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

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

编码愉快,

亚历山德鲁·科索伊

【讨论】:

  • 确实不知道第三个参数,它也适用于createQueryBuilder 函数。 +1
【解决方案2】:

试试:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多