2010-09-09 42 views
1

目前我有两个表和下面的SQL语句,其正确获取以他们在event_dates表日期排序事件表中的项目:MYSQL检索结果,其中日期=下周末

SELECT * FROM events, event_dates 
WHERE events.id=event_dates.event_id 
    AND events.preview=0 AND event_dates.start_date>=now() 
ORDER BY event_dates.start_date ASC,event_dates.start_time ASC LIMIT 3 

现在我想添加额外的AND以确保只设置下周末的事件。日期列采用标准的mysql日期格式(YYYY-MM-DD)。被困在这一点上。干杯。

+0

请尽可能不要混合使用PHP和SQL。首先你会迷惑自己。说到SQL查询,只使用SQL。 PHP对于查询mening很少,它只进行字符串操作。 – 2010-09-09 14:07:19

+0

如果您在星期六查询,该怎么办?星期日? (细节,鲍勃!) – jensgram 2010-09-09 14:07:28

+0

@Col。一般来说,在这个问题上,我同意你的看法,我认为这是一个特殊情况,一个简单的PHP初始计算(比较@ spudley的答案)会给出一个更具可读性的查询(这个查询必须包含很多的逻辑来做同样的事情)。 – jensgram 2010-09-09 14:10:06

回答

4

使用PHP的strtotime()来获得周末的开始和结束时间戳记:

$we_start=strtotime('next saturday'); 
$we_end=strtotime('next monday')-1; 

然后做一个SQL查询来寻找它们之间的时间戳。

select * from mytable where UNIX_TIMESTAMP(mydatefield) BETWEEN $we_start AND $we_end 

希望有帮助。

+0

+1比我想到的要好:)尽管'BETWEEN'的参数顺序很重要(http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between)所以你应该在查询数据库之前先执行'$ real_we_start = min($ we_start,$ we_end)'和'$ real_we_end = max($ we_start,$ we_end)'。 – jensgram 2010-09-09 14:04:17

+0

当然,那是完美的 – kalpaitch 2010-09-09 14:08:41

+2

或者,您可以:'$ we_start = strtotime('next saturday');'和'$ we_end = strtotime('next monday',$ we_start)-1;'。我现在很安静:) – jensgram 2010-09-10 05:33:44