найти все записи, которые находятся в тот же день другой метки времени Unix MySQL - PullRequest
0 голосов
/ 12 апреля 2019

Допустим, у меня есть метка времени Unix 1497664242, которая равна Saturday, June 17, 2017 1:50:42 AM

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

Я попытался установить временную метку, такую ​​как 1494979200, которая равна Saturday, June 17, 2017 12:00:00 AM, думая, что я могу использовать общее время для этого дня и извлечь все записи, которые соответствуют тому же дню.

Я пытаюсь выполнить цикл с определенной датыи найдите все записи, которые соответствуют этому дню, затем увеличивайте на 1 день до сегодняшнего дня 04/12/2019

$start_date = "05/17/2017";

while ($start_date != "04/12/2019") {
    $timestamp = strtotime($start_date);
    $sql_select = "SELECT * FROM table WHERE DATE(timestamp) = DATE(FROM_UNIXTIME($timestamp))";
    $result_select = $GLOBALS['db']->query($sql_select);
    while ($row = $result_select->fetch_array()) {
        // will do stuff here
    }
    $start_date = date("m/d/Y", strtotime($start_date. "+1 day"));
}

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Если вы конвертируете свою метку времени в ДАТУ, т.е. 2017-06-17, а также в поле метки времени в своей базе данных, вы должны получить любую строку в этот день

Теперь мы знаем, что столбец timestamp фактически определен как VARCHAR (), вам нужно будет сделать это

SELECT * 
FROM table 
WHERE DATE(FROM_UNIXTIME(timestamp)) = '$start_date';

Так что для вашего фактического кода

$start_date = "2017-05-17";

while ($start_date != "2019-04-12") {

    $sql_select = "SELECT * 
                    FROM table 
                    WHERE DATE(FROM_UNIXTIME(timestamp)) = '$start_date'";

    $result_select = $GLOBALS['db']->query($sql_select);
    while ($row = $result_select->fetch_array()) {
        // will do stuff here
    }
    $start_date = date("Y-m-d", strtotime($start_date. "+1 day"));
}
0 голосов
/ 12 апреля 2019

Я бы НЕ использовал функции в запросе SQL в соответствии с предложением (DATE(FROM_UNIXTIME(timestamp))), поскольку это не позволит SQL использовать индекс для столбца метки времени.

Я бы вычислил два datetime в php (начало + конец дня), что-то вроде этого:

$dt       = new DateTime('@' . $timestamp); // Should take care about timezones if you need
$dt_begin = $dt->format('Y-m-d 00:00:00');
$dt_end   = $dt->format('Y-m-d 23:59:59');

Если ваши метки времени в БД хранятся как целые числа:

SELECT
    * 
FROM
    table 
WHERE
    timestamp BETWEEN UNIX_TIMESTAMP('$dt_begin') AND UNIX_TIMESTAMP('$dt_end')

Если ваши метки времени в БД хранятся как TIMESTAMP или DATETIME:

SELECT
    * 
FROM
    table 
WHERE
    timestamp BETWEEN '$dt_begin' AND '$dt_end'
...