mysql - 带有 mysql 的教义序数(错误:预期文字,得到'@')
问题描述
我需要有一个来自 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)')
以上给我:
错误:预期文字,得到'@'
有人知道如何用 mysql 在学说中模拟 row_number 吗?提前致谢。
解决方案
AFAIK 没有直接的方法将这些数据库变量合并到 DQL 或查询构建器中,您需要执行本机 SQL,然后使用ResultSetMapping
类将查询结果映射到您的实体
SQL
SELECT *
FROM (
SELECT (@row:=@row+1) AS no,
id,
name
FROM `attribute` ,(SELECT @row:=0) t
ORDER BY id
) t WHERE name LIKE "%Jo%"
结果集映射
$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();
推荐阅读
- reactjs - 更新道具时使用“react-spring”为“React.Component”设置动画的最简单方法是什么
- javascript - 如何计算特定元素的文本变化?
- c# - 在for循环中创建类构造函数
- javascript - 如何有条件地将元素保持在一行中?
- angular - Angular HttpClient 响应在第二次单击之前不会更新 html
- php - PHP在html页面上搜索某个html代码
- grafana - 如果在例如 30 分钟后没有新数据,如何在 Grafana 中配置警报以发送警报?
- javascript - 用户登录后如何在 React 中保存用户信息
- linux - 调用 0x16 时出现分段错误
- javascript - 如何将 javascript 数组发送到 php 文件并将其与数据库进行比较?