php + mysql = выбор и отображение строк с разной датой

ребята! Я никогда не встречался с выбором определенных строк между датами и их правильной сортировкой. Любая помощь была бы очень полезна, чтобы понять, как мне организовать скрипт php + mysql.

У меня есть таблица, содержащая строки со столбцом даты в формате mktime(). В этой таблице хранится информация о кликах по рекламе на моем сайте.

Вот структура моей clicks_log таблицы: 1) ID - уникальный id строки с автоинкрементом. 2) DATE - дата в формате mktime, когда кто-то кликнул по ссылке. 3) IP - ip адрес посетителя, перешедшего по ссылке.

Я хочу выбрать всю информацию из таблицы clicks_log и отобразить на странице так:

ДАТА: 15.04.2011

  1. IP-АДРЕС: 192.168.0.1. ДАТА: 08:45, 15.04.2011
  2. IP-АДРЕС: 192.168.0.2. ДАТА: 13:22, 15.04.2011
  3. IP-АДРЕС: 192.168.0.3. ДАТА: 18:58, 15.04.2011

ДАТА: 16.04.2011

  1. IP-АДРЕС: 192.168.0.1. ДАТА: 04:14, 16.04.2011
  2. IP-АДРЕС: 192.168.0.2. ДАТА: 09:35, 16.04.2011
  3. IP-АДРЕС: 192.168.0.3. ДАТА: 14:11, 16.04.2011

ДАТА: 17.04.2011

  1. IP-АДРЕС: 192.168.0.1. ДАТА: 21:56, 17.04.2011
  2. IP-АДРЕС: 192.168.0.2. ДАТА: 23:04, 17.04.2011
  3. IP-АДРЕС: 192.168.0.3. ДАТА: 23:13, 17.04.2011

person ilnur777    schedule 17.04.2011    source источник


Ответы (4)


Вы должны использовать предложение ORDER BY для упорядочения результатов по дате:

SELECT *
FROM `clicks_log`
ORDER BY `date` ASC;

И затем вы можете использовать функция даты PHP, передавая значение даты столбец в качестве второго параметра:

// Get the first date
$dateSection = ...;
while ($row = mysql_fetch_assoc($result)) {
    ...

    // Check here if the date header has changed to begin a new section
    $dateHeader = date("d.m.Y", $row['date']);
    if ( $dateHeader !== $dateSection ) {
        // Build new section header here
        ...
        $dateSection = $dateHeader;
    }

    ...
    echo $row['ip'];
    ...
    echo date("H:i, d.m.Y", $row['date']);
    ...
}

Я опустил код для получения переменных $dateSection и $result, но в документации по PHP есть много примеров.

person elitalon    schedule 17.04.2011

У вас есть две возможности: либо вы получаете свои данные в одном запросе (что я бы предложил), либо вы используете 3 запроса.

Следуя стратегии одного запроса, вы просто получаете данные и упорядочиваете их по времени. в дополнительной строке вы получаете метку времени, представляющую дату, используя функцию sql UNIX_TIMESTAMP()

имея эту метку времени, вы можете разделить свой набор результатов на 3 набора результатов, используя php.

Другим способом будет создание запроса для каждой даты. для этого вы можете использовать функцию php mktime, чтобы получить время для $a = (0:00 15.04). и $b=(23:59 15.04). в условии where вашего запроса mysql вы просто добавляете между оператором. выбранная дата должна быть $a и $b

where tbl.`date` between FROM_UNIXTIME( ' . $a . ') AND FROM_UNIXTIME( ' . $b . ');';
person Jakob Alexander Eichler    schedule 17.04.2011

for ($i = 15; $i <= $current_day_of_month; $i++) {
        // SELECT * FROM clicks_log WHERE DATE LIKE '% $i.04.2011' ORDER BY DATE ASC;
        // print the result
}

Обычно лучше хранить дату в виде временной метки Unix. Это упрощает детальное управление с помощью SELECT.

person Philip    schedule 17.04.2011

Вам нужно будет выбрать данные, упорядоченные в порядке возрастания по дате:

 $sql = "SELECT ip, date FROM clicks_log table ORDER BY date ASC";

А затем обработайте данные в PHP, чтобы разбить их на дни для вывода:

 $date = date_parse($row['date']);
 $year = $row['year'];
 $month = $row['month'];
 $day = $row['day'];
person satnhak    schedule 17.04.2011