2016-08-08 3 views
0

Я пытался вытащить записи на основе указанной даты. В БД у меня есть столбец, в котором хранятся временные метки unix. Пользователь имеет возможность выбирать записи на основе даты. Входы пользователя: 08/08/2016 (например)PHP и MYSQL Найти записи по дате

Как я могу написать инструкцию SQL для обработки этого?

$query .= "`".$o."` = '".date("Y-m-d",strtotime($v))."' AND "; 

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

Каким-то образом мне нужно как-то поменять $o (который является столбцом, хранящим временные метки unix) в формате Y-m-d для сравнения, как показано выше, и сделать эту работу в инструкции SQL.

Любая помощь будет оценена по достоинству.

EDIT

Вот что работает для меня:

$query .= " "$ о.." >= '".strtotime($v)."' AND ". $ O." < '".(strtotime($v)+(24*60*60))."' AND ";

+0

'$ o' - это временная метка unix или имя столбца? – Mike

+0

$ o - имя столбца. – JasonQ

+0

Вы должны заново задать вопрос, а затем – Mike

ответ

0

Вы можете сделать что-то вроде:

"WHERE DATE(`$o`) = '".date("Y-m-d",strtotime($v))."'" 

Однако это не будет использовать индексы, поэтому если у вас есть большой стол, он будет медленнее. Если вы хотите, чтобы иметь возможность использовать индексы вы можете сделать:

"WHERE `$o` >= ".date("Y-m-d",strtotime($v))." 
    AND `$o` < ".date("Y-m-d",strtotime($v))." + INTERVAL 1 DAY" 
0

Вы также можете попробовать этот подход и использовать UNIX_TIMESTAMP на MySQL.

$v = '2016-08-04'; 
$query .= "'".$o."' = UNIX_TIMESTAMP('$v') AND "; 
Смежные вопросы