php - MySql 根据查询结果确定行偏移

标签 php mysql sql

需要通过使用排序表中列条目的值来确定行偏移的数值。

鉴于,我知道感兴趣的行中的唯一用户名($username)。
例如$username = "SnowWhite";

鉴于:可以保证 $username 位于数据库中,并且将出现在我接下来的初始查询的结果中。这是我的初始查询(有效):

$query  = "SELECT ALL  username,ticket_number, queue_time  FROM members WHERE queue_time !=0 ORDER BY queue_time";
$result = mysql_query($query);

有效的是对 $result 的强力 php 搜索$username 值的数组.

我想用一个查询(或上述查询的重铸)替换 php 搜索逻辑,该查询将行偏移的整数值存储在 $result 内。对于用户名列的值 $username到变量中,例如 $offset

例如,如果 SnowWhite 位于 $result 的第三行我期望 $offset == 2 (假设行索引偏移量从 0 开始)。

最终(这有效)我会将所选行的“ticket_number”值更新为 == $offset+1 。作者:

$query="update members set ticket_number='$offset+1' where username='$username'";
mysql_query($query); 

当前工作逻辑

$query  = "SELECT ALL  username,ticket_number, queue_time  FROM members WHERE queue_time !=0 ORDER BY queue_time";
$result = mysql_query($query);
$i = 0;
while ($row = mysql_fetch_array($result)) {
  if ($row[username] == $userinfo)  //-- compare usernames
     {
   ++$i;
   $query="update members set ticket_number='$i+1' where username='$userinfo'";
   mysql_query($query);
   break;
   }
++$i;
}
mysql_free_result($result);
<小时/>

用户名 票号 排队时间 Doc 0 0 第 3 个不在排序结果中 脾气暴躁 0 0 快乐 0 0 瞌睡 1 111 以下是排序后的结果 害羞 2 222 打喷嚏 0 333 白雪公主 ???第444章 这是当前用户(分配???=4) 傻瓜 0 555 邪恶女王 0 666

最佳答案

因此,以您的表格为例:

username    ticket_number   queue_time
Doc             0               0                  The 1st 3 not in sorted result
Grumpy          0               0
Happy           0               0
Sleepy          1               111                The following are in sorted result
Bashful         2               222
Sneezy          0               333
SnowWhite       ???             444               This is the current user (assign ???=4)
Dopey           0               555
EvilQueen       0               666

how to assign the value 4 to the column ticket_number of the username SnowWhite, 4 being the rank of the row in a sorted selection of the initial rows:

first get the sorted result:

$result = mysql_query("SELECT * FROM table WHERE [here the condition for your sorted array]"); 
// don't forget to remove the []. they don't go there.
while ($row = mysql_fetch_assoc($result))
 {$array[] = $row;}

这应该会让你得到类似的东西:

[0]   [username]        [Sleepy]
      [ticket_number]   [1]
      [queue_time]      [111]
[1]   [username]        [Bashful]
      [ticket_number]   [2]
      [queue_time]      [222]
[2]   [username]        [Sneezy]
      [ticket_number]   [0]
      [queue_time]      [333]
[3]   [username]        [SnowWhite]
      [ticket_number]   [NULL]
      [queue_time]      [444]

然后遍历你的数组

    foreach ($array as $number => $row)
     {if ($row[username] == $userinfo)
       {$result = mysql_query('UPDATE table SET ticket_numer=' . ($number+1) . ' WHERE username=' . $userinfo);}}

用户名 SnowWhite 对应的行将得到 ($number + 1) (3 + 1) 作为 Ticket_number

关于php - MySql 根据查询结果确定行偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288507/

相关文章:

php - 自定义帖子类型

php - 无法选择带有 case 条件的计数

php - 是否可以在 Zend MultiOptions 上设置一个类?

php/mysql 可能返回不在数据库中的数据吗?

Mysql 索引对于哪种数据类型是不可能的

sql - 黑斑羚 : argument of type 'NoneType' is not iterable

sql - 如何获得 MySQL 数据库的最后访问(和/或写入)时间?

针对 Excel 电子表格的 SQL 查询

php - Chrome 的 JavaScript 问题

php - Symfony 3,没有实体但有学说的查询