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

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

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

id|name|rank


запросом

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

select * from table order by rank ASC


сортируются все поля с ранком по возрастанию тоисть если ранк =100 то он первый если ранк =1 то он последний

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

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

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

Аватара пользователя
Distructor
Администратор
Сообщения: 1603
Зарегистрирован: 28 дек 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 май 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
Администратор
Сообщения: 1603
Зарегистрирован: 28 дек 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 без особых последствий.


Вернуться в «Вопросы по программированию»