2016-05-03 14 views
1

私は動的にmysqlクエリを構築しています。それは正常に動作しています。問題は、そのクエリで私は日付関数または間に関数を追加したいです。したがって、ユーザーが10,15,30日より古いデータを表示する場合。それに応じてデータが表示されます。mysql datediff:日間のデータを取得

ここに私が現在使用しているコードがあります。

<?php 
require_once 'include/db.php';  
$firstname = 'Alpha'; 
$lastname = 'Romeo'; 
$older_than = 30; 

$query = "SELECT fname,lname,uid,join_date FROM users"; 

$cond = array(); 
$params = array(); 

if (!empty($firstname)) { 
    $cond[] = "fname = ?"; 
    $params[] = $firstname; 
} 

if (!empty($lastname)) { 
    $cond[] = "lname = ?"; 
    $params[] = $lastname; 
} 

if (!empty($older_than)) { 
    $cond[] = "join_date = ?"; 
    $params[] = $older_than; 
} 



if (count($cond)) { 
    $query .= ' WHERE ' . implode(' AND ', $cond); 
} 
echo $query; 
$stmt = $mysqli->prepare($query); 


$bind = array(); 
foreach($params as $key => $val){ 
    $bind[$key] = &$params[$key]; 
} 
$types = str_repeat("s", count($params)); 

array_unshift($bind, $types); 

call_user_func_array(array($stmt, 'bind_param'), $bind); 

$stmt->execute(); 

$stmt->bind_result($fname, $lname, $uid,$older_than); 
    while ($stmt->fetch()) { 
     echo $fname, $lname, $uid,$older_than; 
    } 


?> 

私の理解によれば、ここでコードを変更する必要があります。

if (!empty($older_than)) { 
    $cond[] = "join_date = ?"; 
    $params[] = $older_than; 
} 

私にこれについて助言してください。

答えて

1

DATE_SUBおよび<を使用してください。

if (!empty($older_than)) { 
    $cond[] = "join_date < DATE_SUB(NOW(), INTERVAL ? DAY)"; 
    $params[] = $older_than; 
} 
+0

ご回答ありがとうございます。私が試してみましょう。 – Ironic

関連する問題