2014-10-10 140 views
1

我很积极,我在这里错过了一些东西。Where子句和Order By未按预期返回WordPress

我有一个MySQL数据库表设置: kdate,kday,kmonth和kontent

kdate设置有到期日期(管理员输入)格式化为2014年1月1日的日期(MDY)

我正在尝试获取比今天更早的日期,以便在执行脚本时不显示日期。

global $wpdb; 
$today = date('m-d-y'); 
$result = $wpdb->get_results("SELECT * FROM wp_kaltable WHERE kdate >= $today ORDER BY kdate ASC LIMIT 6 "); 

//echo "<pre>"; print_r($result); echo "</pre>"; 

foreach($result as $row) 
{ 

echo "<div class='kalcontain'><div class='kal'><div class='kdate'><p class='kmonth'>".$row->kmonth."</p><p class='kday'>" .$row->kday."</div><div class='kontent'><p class='ktext'>".$row->kontent. "</p></div><div class'clear'></div></div></div>"; 

} 

当我执行这个脚本时,我得到所有的数据,即使是日期少于今天的日期。 另外,使用ORDER BY时,它按月份和日期排序,但不是年份。

所有协助表示赞赏。

(*此代码仅用于测试目的)

回答

0

尝试,而不是:今天

"SELECT * FROM wp_kaltable WHERE kdate >= '$today' ORDER BY kdate ASC LIMIT 6 " 

围绕$单引号内是很重要的。

如果kdate是日期格式,那么你可以只使用CURDATE()从MySQL,这样你就不必在PHP渣土周围:

"SELECT * FROM wp_kaltable WHERE kdate >= CURDATE() ORDER BY kdate ASC LIMIT 6 " 

如果kdate不是日期格式,它可能不由于你的ORDER BY不能正常工作,那么这些SQL语句都不会起作用。您将需要转换为日期格式,以便于>=

+0

谢谢@JNevil,排序按现在是正确的,和日期今天之前没有显示。优秀! (我没有足够的积分给你+1,所以这里是... +1!) – 2014-10-10 14:33:27

0

你从今天起,而不是<从今天日期查询>

SELECT * 
FROM  wp_kaltable 
WHERE kdate <= $today -- Note the <= operator 
ORDER BY kdate ASC 
LIMIT 6