необходимо определить числовое значение смещения строки, используя значение записи столбца в отсортированной таблице.
Учитывая, я знаю уникальное имя пользователя ($ 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);
То, что работает, – это поиск PHP-запроса грубой силы для массива $result
для значения $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 1-й 3 не в отсортированном результате Grumpy 0 0 Happy 0 0 Sleepy 1 111 Следующий результат сортирован по ni Bashful 2 222 Sneezy 0 333 SnowWhite ??? 444 Это текущий пользователь (присвойте ??? = 4) Dopey 0 555 EvilQueen 0 666
Итак, пример таблицы:
имя пользователя ticket_number queue_time Doc 0 0 1-й 3 не отсортированный результат Grumpy 0 0 Счастливые 0 0 Sleepy 1 111 Ниже приведены отсортированные результаты Bashful 2 222 Sneezy 0 333 Чистый белый цвет ??? 444 Это текущий пользователь (присвойте ??? = 4) Dopey 0 555 EvilQueen 0 666
как присвоить значение 4 столбцу ticket_number имени пользователя SnowWhite, 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