Intereting Posts

MySql Определяет смещение строки из результата запроса

необходимо определить числовое значение смещения строки, используя значение записи столбца в отсортированной таблице.

Учитывая, я знаю уникальное имя пользователя ($ 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