2013-07-23 52 views
0

我運行下面的SQL查詢我的web應用程序:檢查布爾真/假結果,PostgreSQL的查詢

SELECT EXISTS (
SELECT id 
FROM user 
WHERE membership=1244) 

我期待(布爾數據)的結果,但我得到't'或'f'爲假。 如何讓它返回到我的lua代碼一個標準的布爾值?

我發現下面的帖子:

Reading boolean correctly from Postgres by PHP

所以我想我的代碼更改爲類似這樣:

SELECT EXISTS ::int (
SELECT id 
FROM user 
WHERE membership=1244) 

SELECT ::INT (SELECT EXISTS (
SELECT id 
FROM user 
WHERE membership=1244)) 

但我m得到一個語法錯誤。
你能說出處理這個問題的最佳方法嗎?我應該將結果't'投射到布爾值嗎?或者有沒有辦法告訴postgresql返回true/false而不是't'/'f'?

謝謝。

回答

9

試試吧你是如此接近

SELECT EXISTS(SELECT ID FROM用戶WHERE會員= 1244):: INT

+0

在Postgres 9.1.9中,它工作正常。請參閱http://sqlfiddle.com/#!1/bfe1e/2 此外,PHP的0或1作爲布爾值 –

+0

我的錯誤。抱歉。 –

+0

沒問題。你給了我一個使用sqlfiddle的藉口。我剛剛瞭解到的,所以我很興奮。 :) –

2

CASE

select  
    (case when exists (SELECT id FROM user WHERE membership = 1244) 
    then 1 
    else 0 
    end) as column; 

my test fiddle

+0

我不知道sqlfiddle的存在。謝謝! –

1

第一個查詢確實返回一個布爾值。一個t顯示爲查詢

select exists (select 1); 
exists 
-------- 
t 

的返回值,但如果你檢查它的類型是一個布爾值:

select pg_typeof(exists (select 1)); 
pg_typeof 
----------- 
boolean 

您將與Lua的PostgreSQL驅動手動檢查如何正確處理它。

0

您最初的查詢是罰款本身:

SELECT id FROM user WHERE membership=1244 

你只需要檢查它是否返回行或不行。