2016-05-03 14 views
1

Ich erstelle mysql Abfrage dynamisch. Es funktioniert gut. Problem ist in dieser Frage ich will datediff Funktion oder zwischen hinzufügen. Also, wenn Benutzer wählen zeigen Daten älter als 10,15,30 Tage. es zeigt Daten entsprechend an.mysql datediff: Daten zwischen Tage

Hier ist der Code, den ich im Moment verwende.

<?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; 
    } 


?> 

Nach meinem Verständnis muss ich den Code hier ändern.

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

Bitte teilen Sie mir dies mit.

Antwort

1

Verwenden Sie DATE_SUB und <.

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

Danke für Ihre Antwort. Lass es mich versuchen. – Ironic