mysql的规则或正数(错误:预期为文字,获得';@';)

mysql的规则或正数(错误:预期为文字,获得';@';),mysql,doctrine,row-number,Mysql,Doctrine,Row Number,我需要一个mysql数据库的原始编号。我发现在mysql中如何模拟row_num,如下所示: SET @row=0; SELECT * FROM ( SELECT (@row:=@row+1) AS no, id, name FROM `attribute` ORDER BY id ) t WHERE name LIKE "%Jo%" 我从以下代码开始: $this->getEntityManager()->getConne

我需要一个mysql数据库的原始编号。我发现在mysql中如何模拟row_num,如下所示:

    SET @row=0;
    SELECT * FROM (
     SELECT (@row:=@row+1) AS no, id,  name FROM `attribute` ORDER BY id
     ) t WHERE name LIKE "%Jo%"
我从以下代码开始:

$this->getEntityManager()->getConnection()->exec("SET @counter = 0");
我试着:

        $this->result = $this->createQueryBuilder('a')
            ->select('a')
            ->where($expr->in('att.ordinal_number', $this->createQueryBuilder('att')->
                    select('(@counter:=@counter+1) AS ordinal_number')->
                    from(\App\Entity\Attribute::class, 'att')->
                    orderBy('att.id')->getDQL()))
        $this->result = $this->createQueryBuilder('a')
            ->select('a')
            ->addSelect('(SELECT (@counter:=@counter+1) AS oridinal_number, id, '
                    .' name FROM App:Entity:Atrribute ORDER BY id)')
我试着:

        $this->result = $this->createQueryBuilder('a')
            ->select('a')
            ->where($expr->in('att.ordinal_number', $this->createQueryBuilder('att')->
                    select('(@counter:=@counter+1) AS ordinal_number')->
                    from(\App\Entity\Attribute::class, 'att')->
                    orderBy('att.id')->getDQL()))
        $this->result = $this->createQueryBuilder('a')
            ->select('a')
            ->addSelect('(SELECT (@counter:=@counter+1) AS oridinal_number, id, '
                    .' name FROM App:Entity:Atrribute ORDER BY id)')
请给我:

错误:应为文字,但得到“@”

有人知道如何用mysql模仿条令中的行数吗?
提前感谢。

AFAIK没有直接的方法将这些DB变量合并到DQL或查询生成器中,您将需要执行,然后使用类将查询结果映射到您的实体

SQL

结果集映射

$rsm = new ResultSetMapping;
$rsm->addEntityResult('Attribute', 'a');
$rsm->addFieldResult('a', 'id', 'id');
$rsm->addFieldResult('a', 'name', 'name');
$rsm->addScalarResult('no', 'no');

$query = $this->_em->createNativeQuery('SELECT * 
                                        FROM (
                                            SELECT (@row:=@row+1) AS no, 
                                                    id,
                                                    name
                                            FROM attribute ,(SELECT @row:=0) t
                                            ORDER BY id
                                        ) t WHERE name LIKE ?',$rsm);
$query->setParameter(1, '%Jo%');
$users = $query->getResult();