мини класация (не знам как да го обосновя) :)

rotator

Registered
Значи идеята ми е да направя мини класация

Примерно имам главна класация

1. Потребител - 2000
2. Потребител - 1500
3. Потребител - 1000
4. Потребител - 500
....
200. Потребител - 1

Въпроса ми е как ще стане примерно си в собствения профил и според класацията си да кажем на 100-тно място и в профила да ти се покаже да кажем

99. Потребител - 10
100. АЗ - 9
101. Потребител - 8

Някой идея, че днес толкова мислих, сещам се за идей но ми се виждат неспулочливи и затова да попитам някой ако се е свлъсквал с този проблем да сподели :)
 
Не знам дали правилно те разбирам, но примерно за това ли питаш:
mysql_query("select CASE WHEN userid=$currentuser THEN 'AZ' ELSE username END as UserName, Score from table order by score DESC")
 
[sql]SELECT `поле с име/ид`, `поле с точки` FROM `таблицата` ORDER BY `поле с точки` DESC;[/sql]
[sql]SET @number := 0; SELECT `поле с име/ид`, `поле с точки`, `rank` FROM (SELECT @number := @number + 1 AS `rank`, `поле с име/ид`, `поле с точки` FROM `таблицата` ORDER BY `поле с точки` DESC) AS `result` WHERE `поле с име/ид` = 'име/ид';[/sql]
 
Ами ако имаш таблица users с полета username и position и при успешна сесия $_SESSION["username"]= на потребителското ти име, можеш да направиш следното

$query = "SELECT position FROM users WHERE username = " . $_SESSION["username"] . "";

$send = mysql_query($query);
int $myPosition = mysql_fetch_array($send);

След това

$query2 = "SELECT username, position FROM users WHERE position = " . $myPosition['position'] - 1 . "";

$query2_send = mysql_query($query2);

$prevUser = mysql_fetch_array($query2_send);


$query3 = "SELECT username, position FROM users WHERE position = " . $myPosition + 1 . "";

$query3_send = mysql_query($query3);

$nextUser = mysql_fetch_array($query3_send);


и презентацията


<html>
<body>
<?php echo $prevUser["position"] . "." . $prevUser['username'] . "<br />" . myPosition['position'] . "." . $_SESSION['username'] . "<br />" . $nextUser['position'] . "." . $nextUser['username']; ?>
</body>
</html>
 
@palex Мисля, че си на прав път. Този код изкарва всички потребители без съответното ID.

Нека да го обесня по ясно.

Как чрез 1 заява да разбера "id" на кое място в DB се нарежда според "ORDER BY `coins` DESC"

И примерно има 200 потребителя с различни "coins" и да кажем в една отделна страница да пише

"Вие сте на 20 Място" (Разбира се "WHERE `id`='1'" (примерно))

Дано съм бил ясен :)
 
Номериране на редовете в mySql май се прави най-лесно така:

[sql]
select @rownum:=@rownum+1 as RowNum, CASE WHEN t.UserName='rotator' THEN 'АЗ' ELSE t.UserName END as FullName, t.Coins from table_name t, (SET @RowNum:=0) r Order by Coins DESC
[/sql]

Явно показваш на кое място е потребителя преди да извъртиш класацията, щом искаш заявка за това. Аз си я представям нещо такова:
[sql]
select (select count(*) from table_name t2 where t2.Coins<=t1.Coins) as Place
from table_name t1
WHERE t1.UserName='rotator'
[/sql]
 
Такааааа, значи това не е коректно при еднакъв брой точки, защото винаги втората заявка ще показва последно място сред еднаквите ( t2.Coins<=t1.Coins) или първо ( t2.Coins<t1.Coins). За да стане според мен трябва да добавим критерии за подреждане в рамките на еднакви coins и най-лесния е ID на потребителя, т.е.:

[sql]
select
@rownum:=@rownum+1 as RowNum,
CASE WHEN t.UserName='rotator' THEN 'АЗ' ELSE t.UserName END as FullName,
t.Coins
from table_name t, (SET @RowNum:=0) r
Order by Coins DESC, ID[/sql]


[sql]select (
select count(*) from table_name t2
where t2.Coins<t1.Coins or (t2.Coins=t1.Coins and t2.ID<t1.ID)) as Place
from table_name t1
WHERE t1.UserName='rotator' [/sql]

Идеята е да подредим в рамките на един и същ резултат по ID и след това в count заявката да покажем само тези, които са с по-малко ID или с по-малко coins. Сори за недоглеждането!
:?:
 

Back
Горе