php row[,相当于@row:= @ row + 1的php是什么 - php

我有一个MySQL语句,可以在SQL数据库游乐场中成功运行。它查询并返回我的location_values表中的第10行,而不管ID的间隔如何。

看起来像这样:

的MySQL

set @row:=-1;

SELECT location_values.*

FROM

location_values

INNER JOIN

(

SELECT id

FROM

(

SELECT @row:=@row+1 AS rownum, id

FROM

(

SELECT id FROM location_values ORDER BY id

) AS sorted

) as ranked

WHERE rownum % 10 = 0

) AS subset

ON subset.id = location_values.id

working db-fiddle

问题:我想在上面转换此语句并改为在PHP查询中运行它,但是这样做有问题。

目前,我的自定义PHP函数将继续打印整个表,而不是按照MySQL语句的第10行。我怀疑是由于未解释set @row:=-1;中的@row:=@row+1和PHP。

我的PHP功能

function get_incidents() {

$row = -1;

$query = query("

SELECT location_values.*

FROM

location_values

INNER JOIN

(

SELECT id

FROM

(

SELECT $row + 1 AS rownum, id

FROM

(

SELECT id FROM location_values ORDER BY id

) AS sorted

) as ranked

WHERE rownum % 10 = 0

) AS subset

ON subset.id = location_values.id");

confirm($query); //passes in the global $connection;

while ($row = fetch_array($query)) {

$incidents = <<{$row['id']}{$row['name']}{$row['lat']}{$row['lng']}

DELIMETER;

echo $incidents;

} // end of while loop

} // end of function

我是PHP的新手,对于能最好地重构PHP函数以实现我的目标(无论ID的间隔如何)返回第10行的目标,我将不胜感激。

参考方案

MySQL> 8.0

您可以使用窗口功能来完成相同的任务。如果我没有记错的话,正确的方法如下:

SELECT t.* FROM (SELECT *, Row_number() OVER() AS rn FROM location_values) t

WHERE t.rn % 10 = 1

https://www.db-fiddle.com/f/tb2nLZ6dkDPaQxkc6My9Yg/2

MySQL <8.0

您可以使用session属性来模拟window函数,但这并不总是可靠的。

方法1(只能执行一次;不推荐):

SELECT t.*

FROM

(SELECT *, @position:=((SELECT ifnull(@position, 0)) + 1) AS rn FROM location_values) t

WHERE t.rn % 10 = 1

方法2:

SELECT location_values.*

FROM location_values,

(SELECT @row_number:=0) AS temp

WHERE (@row_number:=@row_number + 1) % 10 = 1

https://www.db-fiddle.com/f/tb2nLZ6dkDPaQxkc6My9Yg/3

PHP mysqli获取查询返回的第一行的值 - php

我正在使用mysqli从数据库中获取某些数据。我正在使用的查询已设置为仅从数据库返回一行。有没有一种方法可以在不使用while循环的情况下获取该行的值?我知道一个while循环对于返回多于一行的行很有用,但是如果不需要while循环,我想避免这种情况,因为不必要的代码是不好的编程。 参考方案 是的-您可以使用:$row = $result->fetch…是否可以在PHP中检索有关MySQL资源的详细信息? - php

我正在处理使用MySQL资源(public $_conn)的(PHP5)类。当我执行print_r($this->-conn)时,会看到诸如资源ID#30的文本。是否可以获取该特定资源的连接详细信息?我必须至少获得MySQL用户名? 参考方案 您应该在文件中的某个位置使用用户名,以便您可以创建连接资源。但是您可以使用以下SQL命令获取当前用户:SELE…正则表达式,用于验证以+254开头的电话号码 - php

我正在尝试创建一个正则表达式以匹配以+254开头的电话号码电话号码示例 +254716370730+254856798768 +254765432135 我努力了preg_match('/^\\+254\\d{9}/,$phonenumber'); 但似乎无效,我们将不胜感激任何帮助 参考方案 正确的语法应为:preg_match(…如何在return语句中编写循环? - php

我需要得到这个结果return [ [$row_0['Наименование'], $row_0['Ассортимент'], $row_0['Сумма']], [$row_1['Наименование'], $row_1['Ассортимент']…从Codeigniter中的联接显示数据 - php

我正在使用一个简单的联接从两个数据库中提取数据。这是模型中的联接:function com_control(){ $this->db->select('*'); $this->db->from('comments'); $this->db->join('posts'…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值