сортировка постов по просмотрам за сегодня, вчера, неделю, месяц

Тема в разделе "Как сделать...", создана пользователем Smile, 7 ноя 2012.

  1. Smile

    Smile

    Регистр.:
    12 ноя 2006
    Сообщения:
    157
    Симпатии:
    11
    Добрый день,

    нужно сделать сортировку постов по просмотрам за сегодня, вчера, неделю, месяц... не подскажите скрипт где это уже реализовано ? структуру баз данных...

    Спасибо.
     
  2. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    80
    Симпатии:
    43
    Слизком обширный вопрос. Вы используете самописный сайт или это движек?
    Вообще для сортировки обычно в SQL запрос передается просто "ORDER BY {поле} DESC" полный синтаксис есть в мануалах.
     
  3. SuperSergey

    SuperSergey Создатель

    Регистр.:
    10 дек 2012
    Сообщения:
    10
    Симпатии:
    1
    Переделал наскоро из счетчика скачиваний файлов, но думаю несложно переделать под "просмотры". Могут быть мелкие ошибки.

    ----------------------------запрос для создания таблицы---------------------------------------------------
    DROP TABLE IF EXISTS `download_manager`;
    CREATE TABLE `download_manager` (
    `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `filename` CHAR(255) NOT NULL DEFAULT '',
    `down_date` DATE NOT NULL DEFAULT '0000-00-00',
    `downloads` INT(11) NOT NULL DEFAULT '0'
    ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=1;

    CREATE UNIQUE INDEX download_manager_Index1 ON download_manager(`down_date`,`filename`);

    ----------------------------запрос при скачивании файла---------------------------------------------------
    $sql = "INSERT INTO download_manager SET down_date = CURDATE(), filename='".mysql_real_escape_string($file)."'
    ON DUPLICATE KEY UPDATE downloads=downloads+1";

    ----------------------------запросы для выборки---------------------------------------------------
    выборка за сегодня:
    $sql = "SELECT downloads FROM download_manager WHERE down_date = CURDATE()";

    выборка за вчера
    $sql = "SELECT downloads FROM download_manager WHERE down_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND CURDATE()";

    выборка за неделю
    $sql = "SELECT SUM(downloads) FROM download_manager WHERE down_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE()";

    выборка за месяц
    $sql = "SELECT SUM(downloads) FROM download_manager WHERE down_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND CURDATE()";
     
  4. inkvizitor

    inkvizitor Создатель

    Регистр.:
    27 фев 2008
    Сообщения:
    39
    Симпатии:
    0
    Необходимо реализовать сортировку новостей по популярности, соответственно есть clicks(кол-во кликов по оценкам) и marks(сумма всех оценок)
    популярность же = marks/clicks
    Решения вижу 2:
    1) создать еще 1 поле, в которое записывать уже рейтинг, и по нему тупо сортировать
    2) получать весь массив новостей, и функцией считать рейтинг, после чего сортировать пузырьком, а потом выводить.
    Может кто подскажет, какой метод наиболее оптимальный, или предложит свой?