Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы Позиция в рейтинге 10.0

Позиция в рейтинге 10.0


     15.10.2014    Общие вопросы    864

вопрос
Мне человек написал код, который показывает на каком месте находится новость (сортировка по рейтингу).
$newssort  = $db->query( "SELECT * FROM dle_post_extras ORDER BY rating DESC" );
$newssort2 = $db->super_query("SELECT * FROM dle_post_extras WHERE news_id = '{$row['news_id']}'");

$is = 1;

while($rowes = $db->get_row($newssort)) {
    $echo .= "Место в рейтинге: <b><u>" . $is++ . "</u></b> ID новости: " . $rowes['news_id'] . "<br />";
    $pos = $is++;
    $post2 = $pos - 1;
    $db->super_query( "UPDATE dle_post_extras SET positionnews='{$post2}' WHERE news_id='{$rowes['news_id']}'" );
}

$tpl->set( "{positnews}", "<div class=\"position\">Место в рейтинге:</div><div class=\"position1\">{$newssort2['positionnews']}</div>" );

Позицию новости выводит, но криво. Пишет правильно только позицию первой новости, потом 3, 5, 7, 9 и тд.
Как сделать чтобы показывало правильную позицию новости в рейтинге?

Ответил: Sander


Говнокодище тот еще...

Так, возможно, будет работать:
$newssort  = $db->query( "SELECT news_id FROM dle_post_extras ORDER BY rating DESC" );
$is = 0;
while($rowes = $db->get_row($newssort)) {
    $is++;
    $echo .= "Место в рейтинге: <b><u>$is</u></b> ID новости: " . $rowes['news_id'] . "<br />";
    $db->query( "UPDATE dle_post_extras SET positionnews='{$is}' WHERE news_id='{$rowes['news_id']}'" );
}

$newssort2 = $db->super_query("SELECT positionnews FROM dle_post_extras WHERE news_id = '{$row['news_id']}'");
$tpl->set( "{positnews}", "<div class=\"position\">Место в рейтинге:</div><div class=\"position1\">{$newssort2['positionnews']}</div>" );

Комментарии пользователей (5)

djimbo
21

djimbo - 16 октября 2014 19:47 - Юзер

Теперь начинается отсчет с 2 позиции, потом 4, 6, 8

Sander
1126

1637 | 1204

Sander - 16 октября 2014 20:49 - Эксперт

А блин, не заметил этого бреда
<u>" . $is++ . "</u>

Исправил.

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

Gameer
226

1124 | 396

Gameer - 16 октября 2014 20:09 - Эксперт

Вот верно, добавьте в ответ
$newssort = $db->query("SELECT * FROM dle_post_extras ORDER BY rating DESC");
$newssort2 = $db->super_query("SELECT * FROM dle_post_extras WHERE news_id = '{$row['news_id']}'");
$is=0;

while($rowes = $db->get_row($newssort)){
    $is++;
    $echo .= 'Место в рейтинге: <b><u>'.$is.'</u></b> ID новости: '.$rowes['news_id'].'<br>';
    $db->super_query("UPDATE dle_post_extras SET positionnews='{$is}' WHERE news_id='{$rowes['news_id']}'");
}

$tpl->set( '{positnews}', "<div class='position'>Место в рейтинге:</div><div class='position1'>{$newssort2['positionnews']}</div>" );


Просто зачем увеличивать два раза туже самую переменную ? И использовать не нужные ? Все одной можно было сделать...

Истина в противоречии.​

Sander
1126

1637 | 1204

Sander - 16 октября 2014 20:53 - Эксперт

SELECT *

Нет смысла тянуть все поля, если нужно только одно.

$newssort2 = $db->super_query

Эта строка должна быть после цикла. Иначе в переменной мы имеем устаревшие данные.


Я ж и говорю, что говнокодище то еще :) Особо не вникал, не заметил, что там переменная увеличивается внутри строки.

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

Gameer
226

1124 | 396

Gameer - 16 октября 2014 23:53 - Эксперт

Sander, я сам был в недоумении зачем столько, просто сделал из исходника что бы работало, а то не известно может оно еще с чем то связано.

Истина в противоречии.​

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы