需要通过使用排序表中列条目的值来确定行偏移的数值。
鉴于,我知道感兴趣的行中的唯一用户名($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/