MySql从查询结果确定行偏移量

时间:2013-11-29 15:01:04

标签: 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);

用户名ticket_number queue_time Doc 0 0第3个未排序的结果 脾气暴躁0 0 快乐0 0 困了1 111以下是ni排序结果 害羞2 222 Sneezy 0 333 白雪公主 ??? 444这是当前用户(assign ??? = 4) Dopey 0 555 EvilQueen 0 666

1 个答案:

答案 0 :(得分:0)

所以使用你的表格示例:

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

如何将值4分配给用户名SnowWhite的列ticket_number,4是初始行的排序选择中的行的排名:

首先得到排序结果:

$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