2016-05-08 4 views
1

私はthoses 4つのテーブル「」条件は予想通りではない働いていた(「か」の問題)

Model of my database

に参加する問題を抱えている私は、異なる種類(ユーザー〔と予約数をカウントしますmrbs_users.id]、部屋[mrbs_room.room_id]、エリア[mrbs_area.area_id])。

Howewer私はこのクエリを実行すると(ユーザーのために(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 
       JOIN mrbs_area ON mrbs_room.area_id = mrbs_area.id 
WHERE mrbs_entry.start_time BETWEEN "145811700" and "1463985000" 
     or 
     mrbs_entry.end_time BETWEEN "1458120600" and "1463992200" and mrbs_users.id = 1 

結果は、すべてのユーザの予約の総数、id = 1を持つユーザーだけでなくなります。

誰かが私を助けることができるなら..事前に感謝します。

答えて

2

複数の条件がある場合は常に、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は次のように解析され

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

また、私は文字列定数を囲む引用符を削除しました。データ型を混在させることは悪い習慣であり、一部のデータベースでは、型間の変換によってクエリの効率が低下する可能性があります。

+0

ありがとうございました。しかし、私はあなたの最初のWHERE(....)を使用すると結果は23であり、2番目のWHERE(...)の結果は17です。なぜ私は異なる結果があるのか​​分かりません。 –

0

不適切な条件WHEREが原因で直面した問題。
ので、次のようになります。また

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

ON句はWHERE句の前に実行されるための基準が速くそこに行ってしまうので、あなたは、WHERE句を避けるために、それは良いことだけINNER JOINJOIN)を使用する場合。この場合
あなたのクエリは次のようにする必要があります:

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 
+0

しかし、私が持っている結果は "#1305 - 機能mrbs_room.idは存在しません"このエラーを理解していません –

+0

ああ、私はfirts 'join'基準の後に' and'を追加するのを忘れました。 – Vasily

+0

ああ、ありがとう、私はもうエラーはありませんが、私はユーザーを変更すると、結果は常に同じです。問題がどこにあるのか知っていますか? –

関連する問題