Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ";其中;工作条件不符合预期(“或”问题)_Sql - Fatal编程技术网

Sql ";其中;工作条件不符合预期(“或”问题)

Sql ";其中;工作条件不符合预期(“或”问题),sql,Sql,我在连接这4个表时遇到问题 我想计算不同种类的预订数量(用户[mrbs_users.id]、房间[mrbs_room.room_id]、面积[mrbs_area.area_id]) 但是,当我执行此查询时(对于用户(id=1)) 结果是每个用户的预订总数,而不仅仅是拥有id=1的用户 所以如果有人能帮我。。提前感谢。当您有多个条件时,请在where子句中使用括号。您的,其中解析为: WHERE (mrbs_entry.start_time BETWEEN "145811700" and "14

我在连接这4个表时遇到问题

我想计算不同种类的预订数量(用户[mrbs_users.id]、房间[mrbs_room.room_id]、面积[mrbs_area.area_id])

但是,当我执行此查询时(对于用户(id=1))

结果是每个用户的预订总数,而不仅仅是拥有
id=1
的用户


所以如果有人能帮我。。提前感谢。

当您有多个条件时,请在
where
子句中使用括号。您的
,其中
解析为:

WHERE (mrbs_entry.start_time BETWEEN "145811700" and "1463985000" ) or
      (mrbs_entry.end_time BETWEEN "1458120600" and "1463992200" and
       mrbs_users.id = 1
      )
你大概打算:

WHERE (mrbs_entry.start_time BETWEEN 145811700 and 1463985000  or
       mrbs_entry.end_time BETWEEN 1458120600 and 1463992200
      ) and
      mrbs_users.id = 1

此外,我删除了字符串常量周围的引号。混合数据类型是一种不好的做法,在某些数据库中,类型之间的转换会降低查询效率。

您所面临的问题是由不正确的条件
WHERE
引起的
因此,我们应该:

  WHERE (mrbs_entry.start_time BETWEEN 145811700 AND 1463985000 )
         OR
        (mrbs_entry.end_time BETWEEN 1458120600 AND 1463992200 AND mrbs_users.id = 1)  
此外,当您仅使用
内部联接
联接
)时,最好避免使用
WHERE
子句,因为
ON
子句在
WHERE
子句之前执行,因此那里的条件执行得更快
在本例中,您的查询应如下所示:

SELECT COUNT(*)
FROM mrbs_users 
     JOIN mrbs_entry ON mrbs_users.name=mrbs_entry.create_by 
     JOIN mrbs_room ON mrbs_entry.room_id = mrbs_room.id 
          AND
          (mrbs_entry.start_time BETWEEN 145811700 AND 1463985000 
            OR ( mrbs_entry.end_time BETWEEN 1458120600 AND 1463992200 AND mrbs_users.id = 1)       
          )         
     JOIN mrbs_area ON mrbs_room.area_id = mrbs_area.id

非常感谢。但是当我使用你的第一个WHERE(…)时,结果是23,第二个WHERE(…)的结果是17。我不明白为什么我有不同的结果。好的,但我的结果是“#1305-功能mrbs_room.id不存在”我不明白这个错误哦,我忘记了添加
在第一次
加入
标准后,请参阅更新的帖子哦是的,谢谢我不再有错误,但当我更改用户时,结果总是一样的。你知道问题出在哪里吗?@VincentDUPONT这不是问题,这意味着第二个条件没有实现。要验证是否只需删除第一个条件,您将看到任何记录是否满足条件
mrbs_entry.end_time介于1458120600和1463992200之间,并且mrbs_users.id=1
SELECT COUNT(*)
FROM mrbs_users 
     JOIN mrbs_entry ON mrbs_users.name=mrbs_entry.create_by 
     JOIN mrbs_room ON mrbs_entry.room_id = mrbs_room.id 
          AND
          (mrbs_entry.start_time BETWEEN 145811700 AND 1463985000 
            OR ( mrbs_entry.end_time BETWEEN 1458120600 AND 1463992200 AND mrbs_users.id = 1)       
          )         
     JOIN mrbs_area ON mrbs_room.area_id = mrbs_area.id