2016-04-18 12 views
0

私は指定された目的地のために与えられたタイムスロット(2016-04-22から2016-04-23)で利用可能な車の総量を表示する選択をしようとしています。MySQL - 利用可能な日付を見つけよう

この場合、マンダルでレンタル可能な車の数を確認したいと思います。しかし、私の質問では、目的地を指定したにもかかわらずMandalにない利用可能な車の合計量も与えられます。上記のクエリを実行する

SELECT destination, COUNT(destination) AS 'available cars' 
FROM cars 
LEFT JOIN orders 
    ON cars.id = orders.car_id 
WHERE orders.car_id IS NULL 
    OR date_to NOT BETWEEN '2016-04-22' AND '2016-04-23'  
    AND date_from NOT BETWEEN '2016-04-22' AND '2016-04-23' 
    AND destination = 'Mandal' 
GROUP BY destination 

は私に次の表に示します: http://i.stack.imgur.com/Ck0s0.png

をマーンダルで利用可能な車と一緒にも表示されるように想定されていないスタヴァンゲルで唯一利用できる車を返すも、それが正しいですか。スタヴァンゲルでは、利用可能な2台の車(別の時間に借りているもの、NOT BETWEEN '2016-04-22' AND '2016-04-23'、まだ賃貸されていないもの、orders.car_id IS NULL)があります。しかし、Mandalの利用可能な車の量は正しいです。現在使用しているとして、彼らはグループ化するために使用することができますように複雑WHERE句を構築する際に

+1

括弧を使用してください。 ORより強くバインドします –

+1

サンプルデータと望ましい結果は、あなたがしようとしていることを伝えるのに役立ちます。 –

+0

どのDBMSを使用していますか? –

答えて

1

括弧は非常に重要であり、「範囲」:

SELECT destination, 
      COUNT(sted) AS 'available cars' 
    FROM cars 
LEFT JOIN orders ON cars.id = orders.car_id 
    WHERE (orders.car_id IS NULL) 
     OR (date_to NOT BETWEEN '2016-04-22' AND '2016-04-23')  
     AND (date_from NOT BETWEEN '2016-04-22' AND '2016-04-23') 
     AND (destination = 'Mandal') 
GROUP BY destination 
あなたは、単に以下を使用するように範囲を調整することを検討する必要があり

WHERE (date_from <= '2016-04-23' AND date_to >= '2016-04-22') 
+0

パンテツが分かりました。 'WHERE(orders.car_idがNULLです。 OR(日付は '2016-04-22'と '2016-04-23'と一致しません) と 'date'は '2016-04-22'と '2016-04-23' )) AND destination = 'Mandal'は私に希望の結果を与えました。ありがとう! – robert

1

私は強くwhere共同いる疑いがある:より大、より正確に範囲を対象とする(BETWEEN文ではなく)、読み少し簡単かもしれないオプション/よりnditionsはon節に移動する必要があります:

SELECT destination, COUNT(sted) AS availablecars 
FROM cars c LEFT JOIN 
    orders o 
    ON c.id = o.car_id AND 
     date_to BETWEEN '2016-04-22' AND '2016-04-23' AND 
     date_from BETWEEN '2016-04-22' AND '2016-04-23' AND 
     destination = 'Mandal' 
WHERE o.car_id IS NULL 
GROUP BY destination; 

サンプルデータがなければ、私は100%確実ではないです。また、日付条件は次のようにすることもできます。

 ON c.id = o.car_id AND 
     date_to >= '2016-04-22' 
     date_from <= '2016-04-23' AND 
     destination = 'Mandal' 
+0

こんにちは@GordonLinoff、私は今すぐ希望の結果で質問を更新しました。 – robert

関連する問題