Mysql 添加自定义行号
我想在SQL语句中添加一个自动行数,而不是使用自动递增列,因为有时某些记录可能会被删除,而自动递增列中的数字不是连续的 我的SQL语句是Mysql 添加自定义行号,mysql,Mysql,我想在SQL语句中添加一个自动行数,而不是使用自动递增列,因为有时某些记录可能会被删除,而自动递增列中的数字不是连续的 我的SQL语句是 $sql = 'set @num=0; SELECT @num:= @num+1 as row_num, t.* FROM table_1 t;'; 我使用mysqli查询语句,$result=$db->query($sql) 我得到错误“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以了解在第1行的“从表_1t中选择@num:=@num
$sql = 'set @num=0; SELECT @num:= @num+1 as row_num, t.* FROM table_1 t;';
我使用mysqli查询语句,$result=$db->query($sql)
我得到错误“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以了解在第1行的“从表_1t中选择@num:=@num+1作为行_num,t.*”附近要使用的正确语法”,我可以从phpMyAdmin中毫无问题地查询该语句,当我使用mysqli进行查询时,该语句有什么问题
致以最良好的祝愿
开尔文。Q:当我使用mysqli查询时,语句有什么问题 我怀疑问题在于您试图在一个语句执行中执行两个单独的SQL语句。(根据错误消息,看起来MySQL很好地读取了SET语句,但在第一个SET语句结束后,对后面的所有内容都犹豫不决。) (请注意,某些客户端接口确实提供了一种方式,可以将连接配置为允许在单个语句执行的上下文中执行“多个语句”。但启用该配置会为某些严重的SQL注入漏洞打开大门。)
对于你没有问的问题,例如“我如何解决这个问题?” 作为一种解决方法,您可以使用内联视图初始化MySQL用户定义变量,例如:
SELECT @num := @num+1 as row_num
, t.*
FROM table_1 t
CROSS
JOIN (SELECT @num := 0 ) i
我们并不真正关心内联视图(别名为i)返回什么,只是因为JOIN操作,我们需要它只返回一行。我们真正感兴趣的是副作用:将值0赋值给用户定义的变量@num
这种方法之所以有效,是因为MySQL将在外部查询运行之前处理内联视图查询并具体化结果集(作为派生表)。为什么不使用
select*,@r:=@r+1作为表中的row\u num交叉连接(select@r:=0)作为t2
它将是单个查询,而不是在您的情况下使用
在SELECT之前使用AS init的目的是什么?“(SELECT@row\u num:=0)”是一个派生表,必须有自己的别名。别名并不重要,但其目的是初始化row_num值,因此名称为“init”。
SELECT @row_num:=@row_num+1 as row_num, t.*
FROM table_1 AS t, (SELECT @row_num:=0) AS init