Выборка из базы числового значения!

mkden
Допустим есть таблица table с полями

Код: Выделить всё

id|name|rank
запросом

Код: Выделить всё

select * from table order by rank ASC 
сортируются все поля с ранком по возрастанию тоисть если ранк =100 то он первый если ранк =1 то он последний

как составить запрос чтоб вытащить из базы порядковый номер по имени

Код: Выделить всё

name = '$name'
Вернуться к началу

Distructor
Администратор
если нужно выбрать место по рангу, можно попробовать

Код: Выделить всё

SET @row:=0;
SELECT pos, id, name, rank
FROM (SELECT @row := @row + 1 AS pos, *  FROM table ORDER BY rank ASC ) AS tbl
WHERE name = '$name'; 
@row:=0 - запрос обнуления номера строки. без него номер строки не будет начинаться с 1, а будет увеличиваться после каждого запроса.
сам запрос сначала выбирает все строки из таблицы добавляя столбец с номером строки, а потом ищет среди них нужную строку.

в общем в плане быстродействия не очень удачный вариант.
стандартных возможностей получения номера строки в мускуле нет.
правильнее завести поле position и при изменении ранга пересчитывать его самому.
Вернуться к началу

mkden
что то не работает как выводить через row ?

Код: Выделить всё

$result5 = mysql_query("SELECT pos, id, name, rank
FROM (SELECT @row := @row + 1 AS pos, *  FROM table ORDER BY rank ASC ) AS tbl
WHERE name = '$name';");
$row = mysql_fetch_array( $result5 );
$row['pos']
-- добавлено 08 ноя 2011, 03:41 --

'$name' нет ;

-- добавлено 08 ноя 2011, 15:51 --

Все ок спс!
Вернуться к началу

Distructor
Администратор
более изящный вариант

Код: Выделить всё

SET @row:=0;
SELECT t1.*, pos FROM `table` as t1
LEFT JOIN (SELECT @row := @row + 1 AS pos, id  FROM `table` ORDER BY rank DESC LIMIT 3) AS t2 ON t1.id=t2.id
"LIMIT 3" позволяет задать ограничение на число строк, для которых просчитывается позиция в зависимости от ранга.
т.о. можно например выводить "ваше место 1" или "ваше место больше 3" (если pos==NULL). естественно 3 можно заменить хоть на 1000 без особых последствий.
Вернуться к началу