2013-11-29 4 views
0

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

Учитывая, я знаю уникальное имя пользователя ($ username) в интересующей строке.
, например. $username = "SnowWhite";

Оценка: Убедитесь, что имя пользователя $ находится в базе данных и будет представлено в результате моего первоначального запроса. Вот мой первоначальный запрос (который работает):

$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 не в отсортированном результате Сердитый 0 0 Happy 0 0 Сонный 1 111 Следующий ni отсортированный результат Bashful 2 222 Sneezy 0 333 SnowWhite ??? 444 Это текущий пользователь (назначить ??? = 4) Dopey 0 555 EvilQueen 0 666

+0

«ВСЕ» - это ПО УМОЛЧАНИЮ, правильно, поэтому нет необходимости (и даже немного запутать), чтобы включить его здесь. – Strawberry

ответ

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 в колонке 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 через массив

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

строка, соответствующая имя пользователя SnowWhite получит ($ номер + 1) (3 + 1), как ticket_number

+0

Глубокое погружение, оно имеет две проблемы (выпуск 1), он присваивает значение «ticket_number» == относительный индексный номер (0,1,2,3,4), а не относительное положение в отсортированном массиве (1,4 , 2,3). (Проблема 2) Я думаю, что он хранит строку {я не сказал вам, что ticket_number имеет тип int (11) ... в тестировании я пробовал {partial} SET ticket_number = '$ offset + 10', и не было никакой разницы в значениях, назначенных из SET ticket_number = '$ offset' – BroncoBilly

+0

для выпуска 2) sql ничего не добавит, вы должны изменить значение $ offset перед отправкой его в mysql: $ offset = 4; $ offset = $ offset + 10; mysql_query («SELECT * FROM table WHERE $ offset») приведет к sql: «SELECT * FROM table WHERE 14» –

+0

спасибо по вопросу № 2 – BroncoBilly

Смежные вопросы