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

Ответить
mkden
Сообщения: 96
Зарегистрирован: 08.05.2010
Допустим есть таблица table с полями

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

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

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

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

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

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

name = '$name'
p.s: В php я нуб!!! )

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
если нужно выбрать место по рангу, можно попробовать

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

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
Сообщения: 96
Зарегистрирован: 08.05.2010
что то не работает как выводить через 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 --

Все ок спс!
p.s: В php я нуб!!! )

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
более изящный вариант

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

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 без особых последствий.

Ответить