预定义计数器未在select语句中更新

霜冻

这是类似于我正在使用的简化代码。在这一本书中,我从ID中提取名称。

$counter = 0;
$select = "SELECT nID,nName WHERE nID = $counter";
$result = sqlsrv_query($connection, $select);

$maxusers = 10;

while($counter<$maxusers) {
  while($row = sqlsrv_fetch_array($result)) {
      echo $row['nName'];
  }
$counter++
}

我得到的是相同的名称,select语句中的计数器保持为0。

我不得不将$ select语句和$ result的定义放入循环中,每次我们进入while循环时,它都会重新定义所有内容,类似于下面的代码。对我来说,这似乎不切合实际,也不是最佳选择。在这种情况下,最佳的解决方法是什么?我对PHP中的变量作用域并不十分熟悉,关于sql函数,我还没有找到任何有关此问题的好的文档。

$counter = 0;
$maxusers = 10;

while($counter<$maxusers) {
$select = "SELECT nID,nName WHERE nID = $counter";
$result = sqlsrv_query($connection, $select);
  while($row = sqlsrv_fetch_array($result)) {
      echo $row['nName'];
  }
$counter++
}

这是我实际编写的代码。

$selectFirst = "SELECT TOP 1 nDateTime,nUserID FROM TB_EVENT_LOG WHERE nUserID = $usercounter AND nDateTime BETWEEN $today AND $tomorrow";
$selectLast = "SELECT TOP 1 nDateTime,nUserID FROM TB_EVENT_LOG WHERE nUserID = $usercounter DateTime BETWEEN $today AND $tomorrow DESC";

$resultFirst = sqlsrv_query($bscon, $selectFirst);      
$resultLast = sqlsrv_query($bscon, $selectLast);


$selectnumberofUsers = "SELECT TOP 1 nUserIdn FROM TB_USER ORDER by nUserIdn DESC";
$usersmaxq = sqlsrv_query($bscon, $selectnumberofUsers);
$usersmax = sqlsrv_fetch_object($usersmaxq)->nUserIdn;


while($usercounter<$usersmax){
    $usercounter = $usercounter + 1;

    while($rowfirst = sqlsrv_fetch_array($resultFirst)) {
        $intime = $rowfirst['nDateTime'];
    }
    echo $intime." ".$usercounter."<br />";
}
哈尔内特

您的问题与可变范围无关。$ select变量一次设置为具有$ counter当前值的字符串。您的第二个示例之所以有效,是因为每次都会重置此值。但是,在第二个示例中,您正在创建一条获得1行的sql语句(假设nID是唯一的),然后遍历结果检索该行。您正在执行10个sql调用,但是如果您像这样修改查询,则只需一个:

$minusers = 0;
$maxusers = 10;

$select = "SELECT nID,nName WHERE nID >= $minusers AND nID < $maxusers ORDER BY nID";

$result = sqlsrv_query($connection, $select);
while($row = sqlsrv_fetch_array($result)) {
    echo $row['nName'];
}

对于您的实际代码,应该可以通过使用GROUP BY为每个nUserId获取一条记录。试试这个:

$selectFirst = "SELECT nDateTime,nUserID FROM TB_EVENT_LOG WHERE nUserID >= $usersmin AND nUserID <= $usersmax AND nDateTime BETWEEN $today AND $tomorrow GROUP BY nUserID";

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在IF语句中构建计数器

来自分类Dev

SQL 未在 if 语句中更新

来自分类Dev

如果我在嵌套的 if 语句中添加一个 else 会遇到计数器问题

来自分类Dev

if语句计数器变量混淆javascript

来自分类Dev

带计数器的for循环中的if语句

来自分类Dev

调试语句执行计数器

来自分类Dev

使增量计数器和多个SELECT语句更有效

来自分类Dev

使增量计数器和多个SELECT语句更有效

来自分类Dev

SAS:在“ proc sql”语句中预定义表名

来自分类Dev

新文档的Firestore更新计数器

来自分类Dev

创建通用的更新计数器方法

来自分类Dev

在DynamoDB中获取/更新计数器

来自分类Dev

DynamoDB更新计数器(或插入密钥)

来自分类Dev

在Swift中更新徽章计数器

来自分类Dev

SQL更改计数器ON更新

来自分类Dev

更新统计计数器或仅计数(*)-性能

来自分类Dev

在select语句中输入用户定义的变量

来自分类Dev

SELECT语句中的SELECT返回0个计数

来自分类Dev

ORACLE If Then Else语句与计数器并选择查询

来自分类Dev

if语句不适用于计数器变量

来自分类Dev

使用CASE和WHERE语句和计数器SQL

来自分类Dev

使用开关语句的质数计数器(输出错误)?

来自分类Dev

Javascript:计数器/条件语句的限制为+ 1

来自分类Dev

ORACLE If Then Else语句与计数器并选择查询

来自分类Dev

if语句每次在java中覆盖我的计数器

来自分类Dev

更新计数器不更新我的DataGridView

来自分类Dev

更新计数器不更新我的DataGridView

来自分类Dev

Cassandra - 使计数器更新和正常更新原子化

来自分类Dev

正确使用COUNT计数SELECT语句中返回的行数