Добрый вечер, I need help.. Как вычислить номер строки (что-то типа ранга) с сортировкой по G_SCORE, если G_ID несколько, т.е.. Код (Text): ID |NAME | G_ID | G_SCORE | G_RANK 1 | user1 | 3 | 3213 | 0 2 | user2 | 4 | 123 | 0 3 | user3 | 4 | 1312 | 0 4 | user4 | 3 | 2355 | 0 5 | user5 | 3 | 6765 | 0 6 | user6 | 3 | 76577 | 0 чтобы получилось: Код (Text): 6 | user6 | 3 | 76577 | 1 5 | user5 | 3 | 6765 | 2 1 | user1 | 3 | 3213 | 3 4 | user4 | 3 | 2355 | 4 3 | user3 | 4 | 1312 | 1 2 | user2 | 4 | 123 | 2 чтобы можно было выбрать G_RANK по ID не пойму никак :unsure: Запрос в БД такой: [sql]SELECT * FROM `tbl` WHERE `G_ID` = '1' ORDER BY `tbl`.`G_SCORE` DESC[/sql] Строчек с G_ID много (G_ID = 1, G_ID = 2 и т.д неопр. кол-во), различаются они по G_SCORE, вот и надо отсортировать G_SCORE по этому G_ID Вот такой запрос PHP: $i = 1; $mysql_query = mysql_query("SELECT * FROM `tbl` WHERE `G_ID` = '1' ORDER BY `tbl`.`G_SCORE` DESC"); while ($row = mysql_fetch_assoc($mysql_query)) { $id = $row['id']; // unique mysql_query("UPDATE `tbl` SET `G_RANK` = '{$i}' WHERE `id` = '{$id}'"); $i++; } очень долгий.. Это всего лишь для одного G_ID.. Помогите пожалуйста, ничего не получается(
uMnepaTop Для получения G_RANK=$rank для ID=$id нужен запрос: select * from tbl where ID='$id' ORDER BY G_SCORE DESC limit $rank,1 Нужно учесть, что G_RANK будет начинаться с 0 - то что у вас сейчас 1. Например нужна запись с вашим G_RANK=5 и ID=$id $rank=5-1=4 Требуемый запрос [SQL]select * from tbl where ID='$id' ORDER BY G_SCORE DESC limit 4,1[/SQL] [/b]
нет, постойте.. если PHP: $i = 1; $mysql_query = mysql_query("SELECT * FROM `tbl` WHERE `G_ID` = '3' ORDER BY `tbl`.`G_SCORE` DESC"); while ($row = mysql_fetch_assoc($mysql_query)) { echo $i.' - '.$row['G_ID'].' - '.$row['NAME'].' - '.$row['G_SCORE'].'<br />'; $i++; } Получится: 1 - 3 - user6 - 76577 2 - 3 - user5 - 6765 3 - 3 - user1 - 3213 4 - 3 - user4 - 2355 PHP: $i = 1; $mysql_query = mysql_query("SELECT * FROM `tbl` WHERE `G_ID` = '4' ORDER BY `tbl`.`G_SCORE` DESC"); while ($row = mysql_fetch_assoc($mysql_query)) { echo $i.' - '.$row['G_ID'].' - '.$row['NAME'].' - '.$row['G_SCORE'].'<br />'; $i++; } Получится: 1 - 4 - user3 - 1312 2 - 4 - user2 - 123 Вот эти $i выделенные жирным, мне надо в G_RANK занести, по их ID или NAME Т.е например, для user2 в G_RANK запишется 2 или для user1 в G_RANK запишется 3 Зачем мне лимит? :shock:
Прошу прошения,это я понял так, что вам известен G_ID и нужно получить юзера с заданным значением G_RANK Вычислить G_RANK можно так PHP: $mysql_query="select * from tbl order by G_ID ,G_SCORE DESC"; $group_id=0; while ($row = mysql_fetch_assoc($mysql_query)) { //если поменялся G_ID , то отсчет G_RANK начать с 1 if($group_id!= $row['G_ID']) { $rank=1; } $q="update tbl set G_RANK='$rank' where id='{$row['ID']}' "; mysql_query($q); $rank++; }
PHP: $mysql_query="select * from tbl order by G_ID ,G_SCORE DESC"; $group_id=0; while ($row = mysql_fetch_assoc($mysql_query)) { //если поменялся G_ID , то отсчет G_RANK начать с 1 if($group_id!= $row['G_ID']) { $rank=1; $group_id= $row['G_ID']; } $q="update tbl set G_RANK='$rank' where id='{$row['ID']}' "; mysql_query($q); $rank++; }
что-то похоже на нужное, но 504 ошибка меня напрягает, а он только первые полтора G_ID проапдейтил =/
может быть без UPDATE'a.. Если при выборке по ID как-то сразу посчитать, на каком он месте по G_SCORE DESC
uMnepaTop Можете сказать: 1) значения каких полей известно-ID ,NAME , G_ID , G_SCORE , G_RANK ? 2) что нужно найти ?
Я имел в виду, для каких записей нужно узнать G_RANK, т.е. какие из полей используются в предложении WHERE