2012-07-22 62 views
0

我正在破解我的第一個ruby腳本來讀寫mysql的數據。從MySQL結果中分配一個BOOL

我想知道某個記錄是否存在。我曾嘗試:

sql = "SELECT EXISTS(SELECT * FROM UserTrucks WHERE User = ? AND Truck = ?)" 
pst = con.prepare(sql) 
does_exist = pst.execute(user_id, truck_id) 

但是當我打印類should_alert的,它是一個MySQL :: STMT,而不是一個真或假的類,甚至是0/1。

我在這裏錯過了什麼?準備好的聲明甚至是正確的用途?

回答

0

爲什麼不使用計

sql = "SELECT CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END AS Exist FROM UserTrucks WHERE User = ? AND Truck = ?" 

sql = "SELECT CASE WHEN EXISTS(SELECT * FROM UserTrucks WHERE User = ? AND Truck = ?) THEN 1 ELSE 0 END AS Exist" 
+0

'EXISTS'得多優化。在你的COUNT(*)'解決方案中,你實際上需要**統計所有行**。而在'EXISTS'查詢中,MySQL一旦找到一行就停止查找。 – 2012-07-22 16:06:35

+0

我看到這將如何明確地返回給我1或0,但希望看到一個更標準的方式來做到這一點(在性能影響@ShlomiNoach提到的頂部)。 – 2012-07-22 16:10:18

+0

這只是一個條件,你可以用任何表達來代替它。由於您使用的是WHERE子句,因此返回的行數很少,因此性能問題很小 – codingbiz 2012-07-22 16:39:18

1
sql = "SELECT IF(EXISTS(SELECT * FROM UserTrucks WHERE User = ? AND Truck = ?), 1, 0)"