多个BETWEEN& mySql Query中的多个AND给出了错误的答案

时间:2011-12-15 10:02:23

标签: mysql

这是我的mysql查询。我要提取的是;过去6天内插入的所有行,包括今天。这是我的查询

    $user_ids = $_SESSION['user_ids']; //its array
    $cs_user_ids =implode(",",$user_ids);


  SELECT fb_user.name,schedule.id,schedule.location,schedule.arrival,
   schedule.departure,schedule.notes,schedule.lat,
   schedule.lon,schedule.who_can_c_me
  FROM schedule,fb_user
  WHERE    EXTRACT(DAY FROM arrival)
  BETWEEN  EXTRACT(DAY FROM DATE_SUB(CURDATE(),INTERVAL 6 DAY))
  AND      EXTRACT(DAY FROM CURDATE())
  AND      EXTRACT(DAY FROM departure)
  BETWEEN  EXTRACT(DAY FROM DATE_SUB(CURDATE(),INTERVAL 6 DAY))
  AND      EXTRACT(DAY FROM CURDATE())
  AND      fb_user.fb_id = schedule.fb_id 
  AND fb_user.fb_id IN($cs_user_ids)

我希望OR取代AND EXTRACT(DAY FROM departure)来代替OR。因为我需要到达离开日期,但它不能与AND ()一起使用{{1}}和我不需要那个。在我的查询中有什么问题?我想{{1}}

的问题

3 个答案:

答案 0 :(得分:0)

这应该有效:

SELECT 
       fb_user.name,schedule.id,schedule.location,schedule.arrival,schedule.departure,
       schedule.notes,schedule.lat,schedule.lon,schedule.who_can_c_me
FROM 
       schedule,fb_user
WHERE    
    (
     (EXTRACT(DAY FROM arrival) BETWEEN EXTRACT(DAY FROM DATE_SUB(CURDATE(),INTERVAL 6 DAY)) AND EXTRACT(DAY FROM CURDATE()))
     OR 
     (EXTRACT(DAY FROM departure) BETWEEN EXTRACT(DAY FROM DATE_SUB(CURDATE(),INTERVAL 6 DAY)) AND EXTRACT(DAY FROM CURDATE()))
    )
  AND      
      fb_user.fb_id = schedule.fb_id 
  AND 
      fb_user.fb_id IN($cs_user_ids)

答案 1 :(得分:0)

试试这个:

SELECT fb_user.name,schedule.id,schedule.location,schedule.arrival,schedule.departure,schedule.notes,schedule.lat,schedule.lon,schedule.who_can_c_me
  FROM schedule,fb_user
  WHERE ((DATE(arrival)  BETWEEN  DATE_SUB(CURDATE(),INTERVAL 6 DAY) AND CURDATE())
  OR (DATE(departure) BETWEEN DATE_SUB(CURDATE(),INTERVAL 6 DAY) AND CURDATE()))
  AND fb_user.fb_id = schedule.fb_id  AND fb_user.fb_id IN($cs_user_ids)

我认为使用Extract DAY会导致意外的结果,比如第1天或第2天这样的比较......避免它。

答案 2 :(得分:-2)

使用括号括号

尝试这种方式
"SELECT fb_user.name,schedule.id,schedule.location,schedule.arrival,schedule.departure,schedule.notes,schedule.lat,schedule.lon,schedule.who_can_c_me
  FROM schedule,fb_user
  WHERE    EXTRACT(DAY FROM arrival)
  (BETWEEN  EXTRACT(DAY FROM DATE_SUB(CURDATE(),INTERVAL 6 DAY)) AND EXTRACT(DAY FROM CURDATE()))

  OR      
  EXTRACT(DAY FROM departure)
  (BETWEEN  EXTRACT(DAY FROM DATE_SUB(CURDATE(),INTERVAL 6 DAY)) AND EXTRACT(DAY FROM CURDATE()))

  AND fb_user.fb_id = schedule.fb_id 
  AND fb_user.fb_id IN($cs_user_ids)"