[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Рейтинг - узнать номер строки
NameKarma
Привет, у меня на форуме у каждого пользователя есть карма - добавляется она за интересные темы, комментарии и так далее.
Так же есть рейтинг пользователей по карме.
Когда просматриваешь пользователя у него высвечивается место в рейтинге.
Дело в том что пока мало пользователей вот этот код подходит чтоб определить место в рейтинге, но когда пользователей будет много код будет не много нагружать сервер.

$a=0;
$com=mysql_query("SELECT * FROM `users` ORDER BY `karma` DESC");
while($com2=mysql_fetch_array($com)){
$name=$com2['name'];
$a++;
if($_SESSION['name']==$name){//Если эта строка пользователя - останавливаем цикл и выводим место в рейтинге
echo 'Место в рейтинге: '.$a.'';
break;
}
}


Вопрос - можно ли как то узнать номер строки исходя из столбца карма для $_SESSION['name'] - без цикла
andrey888
Храните в сессии Айдишник пользователя.
в запросе к базе

mysql_query("SELECT * FROM `users` WHERE `user_id` = " . (int)$_SESSION['id'] . " LIMIT 1 " );

и вытаскивайте все что нужно об этом пользователе


_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
123456
может тебе надо что-то подобное?

SELECT * 
FROM `users`
WHERE `karma` >= (SELECT `karma` FROM `users` WHERE `id_user` = <id_вашего_пользователя> LIMIT 1)
ORDER BY `karma` DESC


или

array_search()
NameKarma
Цитата (andrey888 @ 17.09.2015 - 07:45)
Храните в сессии Айдишник пользователя.
в запросе к базе

mysql_query("SELECT * FROM `users` WHERE `user_id` = " . (int)$_SESSION['id'] . " LIMIT 1 " );

и вытаскивайте все что нужно об этом пользователе

Я храню в сессии id, запрос заключался не в вытаскивание какого-та значения из базы об этом пользователе.
Нужно узнать какое место по карме занимает данный пользователь - карма у всех меняется постоянно и места у всех меняются соответственно (кто то опустится, кто то поднимется), мне не нужно узнать сколько пунктов кармы у пользователя, а его место по карме
Lightt
andrey888
Код будет работать не корректно если $_SESSION['id'] будет начинаться с 0 например 012 будет выдавать id 12

123456
Если у некоторых пользователей одинаковый рейтинг то место выведет неверное.

Я это решал, путем добавления еще одного поля с датой, последнего изменения.
Выводил сам рейтинг по karma + `karma_date` DESC и соответственно при выборке


SELECT *
FROM `users`
WHERE `karma` >= (SELECT `karma` FROM `users` WHERE `id_user` = <id_вашего_пользователя> LIMIT 1)
ORDER BY `karma` DESC , `karma_date` DESC
NameKarma
Цитата (123456 @ 17.09.2015 - 10:15)
может тебе надо что-то подобное?

SELECT * 
FROM `users`
WHERE `karma` >= (SELECT `karma` FROM `users` WHERE `id_user` = <id_вашего_пользователя> LIMIT 1)
ORDER BY `karma` DESC


или

array_search()

Возможно, только если не сложно напишите весь запрос, как он должен выглядеть
NameKarma
Цитата (Lightt @ 17.09.2015 - 12:48)
andrey888
Код будет работать не корректно если $_SESSION['id'] будет начинаться с 0 например 012 будет выдавать id 12

123456
Если у некоторых пользователей одинаковый рейтинг то место выведет неверное.

Я это решал, путем добавления еще одного поля с датой, последнего изменения.
Выводил сам рейтинг по karma + `karma_date` DESC и соответственно при выборке


SELECT *
FROM `users`
WHERE `karma` >= (SELECT `karma` FROM `users` WHERE `id_user` = <id_вашего_пользователя> LIMIT 1)
ORDER BY  `karma` DESC ,  `karma_date` DESC

id начинаются с 1+, без 012 и подобных, точная цифра.

Если одинаковый рейтинг то это не так суть важна, кто то займет то место, кто то следующее, не важно.
Guest
Lightt и часто у вас в БД id пользователей начинаются с 0 ??? rolleyes.gif
andrey888
забыл зарегиться выше..

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
Lightt
andrey888
Ну это просто к сведению) я недавно с такой проблемой столкнулся) долго тупил, что не так.
andrey888
NameKarma может тогда проще хранить место для каждого в базе ? а не постоянно его динамически высчитывать ?...
При удалении или добавлении кармы соответственно меняете место.
Не видя структуры бд сложно сказать но я бы точно не высчитывал его для каждого пользователя в цикле

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
123456
NameKarma
тебе же дали решение! Чем оно тебя не устраивает?

SELECT * 
FROM `users`
WHERE `karma` >= (SELECT `karma` FROM `users` WHERE `id_user` = <id_вашего_пользователя> LIMIT 1)
ORDER BY `karma` DESC , `karma_date` DESC
NameKarma
Цитата (123456 @ 17.09.2015 - 14:33)
NameKarma
тебе же дали решение! Чем оно тебя не устраивает?

SELECT *
FROM `users`
WHERE `karma` >= (SELECT `karma` FROM `users` WHERE `id_user` = <id_вашего_пользователя> LIMIT 1)
ORDER BY  `karma` DESC ,  `karma_date` DESC 

Я не понял что должно быть прописано далее

$karma=mysql_query("SELECT *
FROM `users`
WHERE `karma` >= (SELECT `karma` FROM `users` WHERE `id_user` = <id_вашего_пользователя> LIMIT 1)
ORDER BY `karma` DESC , `karma_date` DESC"
)
$karma2=Здесь что нужно прописать? имею ввиду mysql_num_rows, mysql_fetch_array и так далее($karma);
123456
$karma=mysql_query("SELECT * 
FROM `users`
WHERE `karma` < (SELECT `karma` FROM `users` WHERE `id_user` = <id_вашего_пользователя> LIMIT 1)
ORDER BY `karma` DESC"
)


и через mysql_num_rows получаешь место рейтинге.

Но как сказал Lightt, тебе надо хранить еще и последнее время изменения рейтинга, т.к. у нескольких пользователь может быть рейтинг одинаковый.
twin
Цитата (123456 @ 17.09.2015 - 13:18)
и через mysql_num_rows получаешь место рейтинге.

Вытаскивать на сторону PHP всех юзеров, чтобы подсчитать количество строк? А если их там стопицот?

Откройте для себя COUNT()

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.