X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> PHP сортировка пользователей, Нужна помощь по скрипту
CyberForce
CyberForce
Topic Starter сообщение 22.5.2011, 3:05; Ответить: CyberForce
Сообщение #1


Участник
***

Группа: User
Сообщений: 144
Регистрация: 10.11.2009
Поблагодарили: 43 раза
Репутация:   7  


Нужно сделать, чтобы пользователи выводились в порядке убывания рейтинга $reiting

Сейчас они выводятся в порядке убывания user_posts

<?php $i = 1; ?>
<?php
echo "<table width='96%' cellpadding='0' cellspacing='0'>";
$sql = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_level>='101' ORDER BY user_posts DESC,user_level DESC LIMIT 50");
while ($data = dbarray($sql)) {
$name = $data['user_name'];
$id = $data['user_id'];
//число новостей и статей
$news_ofuser = dbcount('(news_id)','news','news_name='.$id);
$articl_ofuser = dbcount('(article_id)','articles','article_name='.$id);

$result = dbquery("SELECT user_posts FROM ".$db_prefix."users WHERE user_id='".$data['user_id']."'");
$data2 = dbarray($result);
$num_posts = $data2['user_posts'];
$num_comment = dbcount("(comment_id)", "comments", "comment_name='".$data['user_id']."'");

$reiting = $news_ofuser*20+$articl_ofuser*30+$num_posts+$num_comment*2;

echo "<tr><td> $i. <a href='profile.php?lookup=$id' class='side'>$name</a></td>
<td width='75%'>
$reiting (Новостей: $news_ofuser; Статей: $articl_ofuser; Постов на форуме: $num_posts; Комментариев: $num_comment)</td></tr>";
$i++;
}

echo"</tr></table>";
?>


Как это сделать?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
danisimo
danisimo
сообщение 22.5.2011, 5:55; Ответить: danisimo
Сообщение #2


Бывалый
****

Группа: User
Сообщений: 390
Регистрация: 8.9.2010
Поблагодарили: 65 раз
Репутация:   12  


в цмкле while ($data = dbarray($sql)) сначала нужные данные загоняем в первый массив и $reiting во второй
делаем array_multisort(первый массив, SORT_NUMERIC, второй массив)
в foreach выводим данные второго массива


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
oldzas
oldzas
сообщение 22.5.2011, 17:14; Ответить: oldzas
Сообщение #3


Бывалый
****


Группа: Banned
Сообщений: 279
Регистрация: 16.5.2011
Поблагодарили: 25 раз
Репутация:   1  


попробуйте ORDER BY reiting DESC или ASC
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
CyberForce
CyberForce
Topic Starter сообщение 22.5.2011, 17:17; Ответить: CyberForce
Сообщение #4


Участник
***

Группа: User
Сообщений: 144
Регистрация: 10.11.2009
Поблагодарили: 43 раза
Репутация:   7  


Что-то не делается...

<?php
$i = 1;
echo "<table width='96%' cellpadding='0' cellspacing='0'>";
$sql = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_level>='101' ORDER BY user_posts DESC,user_level DESC LIMIT 20");
while ($data = dbarray($sql)) {
$name = $data['user_name'];
$id = $data['user_id'];
//число новостей и статей
$news_ofuser = dbcount('(news_id)','news','news_name='.$id);
$articl_ofuser = dbcount('(article_id)','articles','article_name='.$id);

$result = dbquery("SELECT user_posts FROM ".$db_prefix."users WHERE user_id='".$data['user_id']."'");
$data2 = dbarray($result);
$num_posts = $data2['user_posts'];
$num_comment = dbcount("(comment_id)", "comments", "comment_name='".$data['user_id']."'");
$massiv1[$i] = array ("nameuser"=>$name,"userid"=>$id,"kolnews"=>$news_ofuser,"kolart"=>$articl_ofuser,"postsforum"=>$num_posts,"postscom"=>$num_comment);
$reiting = $news_ofuser*20+$articl_ofuser*30+$num_posts+$num_comment*2;
$massiv2[$i] = array ("ratinguser"=>$reiting);
$i++;
}
array_multisort($massiv2, SORT_DESC)
foreach ($massiv2 as $b) {
echo "$b<br>";
}
echo"</tr></table>";
?>


я вообще запутался... Вроде как должно выводить рейтинг в порядке убывания сейчас, но не выводит.
А как выводить имя пользователя и рядом с ним его рейтинг? Можно подробнее расписать?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
blogaster
blogaster
сообщение 22.5.2011, 17:55; Ответить: blogaster
Сообщение #5


Новичок
*

Группа: User
Сообщений: 23
Регистрация: 19.5.2011
Поблагодарили: 7 раз
Репутация:   0  


а выводишь так:

foreach ($massiv2 as $key=>$b) {
echo $massiv1[$key] ['nameuser']."- ".$b['ratinguser']."<br>";
}

Сообщение отредактировал blogaster - 22.5.2011, 17:56
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
CyberForce
CyberForce
Topic Starter сообщение 22.5.2011, 18:11; Ответить: CyberForce
Сообщение #6


Участник
***

Группа: User
Сообщений: 144
Регистрация: 10.11.2009
Поблагодарили: 43 раза
Репутация:   7  


(blogaster @ 22.5.2011, 17:55) *
а выводишь так:

foreach ($massiv2 as $key=>$b) {
echo $massiv1[$key] ['nameuser']."- ".$b['ratinguser']."<br>";
}


что-то не выводится ничего...

<?php
$i = 1;
echo "<table width='96%' cellpadding='0' cellspacing='0'>";
$sql = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_level>='101' ORDER BY user_posts DESC,user_level DESC LIMIT 20");
while ($data = dbarray($sql)) {
$name = $data['user_name'];
$id = $data['user_id'];
//число новостей и статей
$news_ofuser = dbcount('(news_id)','news','news_name='.$id);
$articl_ofuser = dbcount('(article_id)','articles','article_name='.$id);

$result = dbquery("SELECT user_posts FROM ".$db_prefix."users WHERE user_id='".$data['user_id']."'");
$data2 = dbarray($result);
$num_posts = $data2['user_posts'];
$num_comment = dbcount("(comment_id)", "comments", "comment_name='".$data['user_id']."'");
$massiv1[$i] = array ("nameuser"=>$name,"userid"=>$id,"kolnews"=>$news_ofuser,"kolart"=>$articl_ofuser,"postsforum"=>$num_posts,"postscom"=>$num_comment);
$reiting = $news_ofuser*20+$articl_ofuser*30+$num_posts+$num_comment*2;
$massiv2[$i] = array ("ratinguser"=>$reiting);
$i++;
}
array_multisort($massiv2, SORT_DESC)
foreach ($massiv2 as $key=>$b) {
echo $massiv1[$key] ['nameuser']."- ".$b['ratinguser']."<br>";
}
}
echo"</tr></table>";
?>


вот так сейчас скрипт выглядит
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
danisimo
danisimo
сообщение 22.5.2011, 20:09; Ответить: danisimo
Сообщение #7


Бывалый
****

Группа: User
Сообщений: 390
Регистрация: 8.9.2010
Поблагодарили: 65 раз
Репутация:   12  


$massiv2[$i] = array ("ratinguser"=>$reiting);


массив должен содержать числовые значения а не вложеный массив, то есть $massiv2[$i] = $reiting;

array_multisort($massiv2, SORT_DESC)


нужно делать так, чтобы и второй массив сортировался по первому array_multisort($massiv2, SORT_DESC,$massiv1);

и добавьте после while ($data = dbarray($sql)) {
echo "+";
чтобы знать что выборка из базы не нулевая


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
CyberForce
CyberForce
Topic Starter сообщение 23.5.2011, 1:29; Ответить: CyberForce
Сообщение #8


Участник
***

Группа: User
Сообщений: 144
Регистрация: 10.11.2009
Поблагодарили: 43 раза
Репутация:   7  


все равно не работает... Можете указать точно, где что поменять? Или сразу добавить в код

<?php
$i = 1;
echo "<table width='96%' cellpadding='0' cellspacing='0'>";
$sql = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_level>='101' ORDER BY user_posts DESC,user_level DESC LIMIT 20");
while ($data = dbarray($sql)) {
echo "+";
$name = $data['user_name'];
$id = $data['user_id'];
//число новостей и статей
$news_ofuser = dbcount('(news_id)','news','news_name='.$id);
$articl_ofuser = dbcount('(article_id)','articles','article_name='.$id);

$result = dbquery("SELECT user_posts FROM ".$db_prefix."users WHERE user_id='".$data['user_id']."'");
$data2 = dbarray($result);
$num_posts = $data2['user_posts'];
$num_comment = dbcount("(comment_id)", "comments", "comment_name='".$data['user_id']."'");
$massiv1[$i] = array ("nameuser"=>$name,"userid"=>$id,"kolnews"=>$news_ofuser,"kolart"=>$articl_ofuser,"postsforum"=>$num_posts,"postscom"=>$num_comment);
$reiting = $news_ofuser*20+$articl_ofuser*30+$num_posts+$num_comment*2;
$massiv2[$i] = $reiting;
$i++;
}
array_multisort($massiv2, SORT_DESC,$massiv1);
foreach ($massiv2 as $key=>$b) {
echo $massiv1[$key] ['nameuser']."- ".$b."<br>";
}
}
echo"</tr></table>";
?>


а можно ведь запихнуть все в 1 массив (и имя юзера и количество новостей и рейтинг), а потом отсортировать по рейтингу...
только как это сделать и как вывести потом...

Все... Я сделал все...

Вот конечный результат. Все работает.

<?php
$i = 1;
echo "<table width='96%' cellpadding='0' cellspacing='0'>";
$sql = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_level>='101' ORDER BY user_posts DESC,user_level DESC LIMIT 200");
while ($data = dbarray($sql)) {
$name = $data['user_name'];
$id = $data['user_id'];
//число новостей и статей
$news_ofuser = dbcount('(news_id)','news','news_name='.$id);
$articl_ofuser = dbcount('(article_id)','articles','article_name='.$id);

$result = dbquery("SELECT user_posts FROM ".$db_prefix."users WHERE user_id='".$data['user_id']."'");
$data2 = dbarray($result);
$num_posts = $data2['user_posts'];
$num_comment = dbcount("(comment_id)", "comments", "comment_name='".$data['user_id']."'");
$reiting = $news_ofuser*20+$articl_ofuser*30+$num_posts+$num_comment*2;
if ($num_posts > 10) {
$massiv1[$i] = array ("nameuser"=>$name,"userid"=>$id,"kolnews"=>$news_ofuser,"kolart"=>$articl_ofuser,"postsforum"=>$num_posts,"postscom"=>$num_comment);
$massiv2[$i] = $reiting;
$i++;
}
}
$i=$i-1;
array_multisort($massiv2, SORT_ASC,$massiv1);
$numer=1;
while ($i--) {
echo "<tr><td> $numer. <a href='profile.php?lookup=".$massiv1[$i]['userid']."'>".$massiv1[$i]['nameuser']."</a></td>
<td width='75%'>
".$massiv2[$i]." (Постов на форуме: ".$massiv1[$i]['postsforum']."; Комментариев: ".$massiv1[$i]['postscom']."; Новостей: ".$massiv1[$i]['kolnews']."; Статей: ".$massiv1[$i]['kolart'].")</td></tr>";
$numer++;
}
echo"</tr></table>";
?>
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужны услуги php-разработчика, бартером за дизайн
вы мне скрипт, я вам дизайн
0 Caterpillar 254 Вчера, 23:15
автор: Caterpillar
Открытая тема (нет новых ответов) Обман пользователей мобильного интернета, о как =)
11 RMak 1573 14.12.2017, 12:53
автор: RMak
Открытая тема (нет новых ответов) Недорогие услуги - php/js/mysql/jquery/bootstrap
2 vlads 671 13.12.2017, 21:01
автор: vlads
Открытая тема (нет новых ответов) Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
18 qpPeW 3513 12.12.2017, 13:32
автор: qpPeW
Открытая тема (нет новых ответов) php скрипты любой сложности / диз+верстка (адаптивно)
любые задачи на php - автоматизация, парсинг, работа с БД
1 affrodita 518 8.12.2017, 17:40
автор: affrodita


 



RSS Текстовая версия Сейчас: 18.12.2017, 23:12
Дизайн