2016-05-14 15 views
2

これは私を怒らせている - 私はここで何か非常に単純なものを見逃しているに違いないが、2時間のグーグルで、どこにもいない。私は理髪店の予定を処理するPostgreSQL 9.5.1でRailsアプリケーションを構築しています。列の1つが利用可能です。予約が予約可能かどうかは、ブール値です。私は、指定された予定IDの次の5レコードを取得する必要があります。ブール値列をFALSEに設定してレコードを返さないクエリはありますか?

select * 
from appointments 
where id > 13 
and barber_id = 1 
limit 5 

これは、レコード14-18が使用可能= FALSEの属性で存在しても、使用可能なフィールドはすべてtrueです。

Screenshot from Postico of the table

私は、クエリ

select * from appointments where id > 13 and barber_id = 1 and (available = false) limit 5 

を使用する場合、それはFALSE =利用可能でレコードのみを返しますが、私は、TRUEかFALSEかどうか、一致するすべてのレコードをしたいです。

私も

select * from appointments where id > 13 and barber_id = 1 and (available = false or available = true) limit 5 

を試してみましたが、しかし、これはまた、唯一のTRUE =可能なレコードを返します。

ここで私の髪を裂く - 私は何が欠けているのですか?デフォルトですか?

+0

ちょうど 'available = false'です。ブール値をチェックする別の方法があります: 'length(available :: text)<5';) – Abelisto

答えて

2

あなたのidのは、ソート順になっていない場合は、あなたがそれらをソートし

select * from appointments where id > 13 and barber_id = 1 and 
      (available = false or available = true) order by id asc limit 5 

を返すようにしたいかもしれませんそして、それがnullでない列である場合は、両方をチェックしているので、あなたのブール事は、完全に除去することができ真と偽:)

+1

それはありがとう!データベースはすべて混乱しており、順番にIDを探すと仮定していました。 – Tebbers

+0

@Tebbers問題ありません。どういたしまして。 –

関連する問題