2012-05-18 19 views
0

我正在使用Rails 3.2.2,並且我想從數據庫中檢索記錄,其中至少有012個列的值中有3個存在。也就是說,如果我有一個具有10個屬性(表列)的類(一個MySQL數據庫表),其值可以是nilnull),那麼我想執行一個查詢以便返回至少3個這10個屬性值存在(不是null)。如何從存在10列值中的至少3列的數據庫檢索記錄?

可能嗎?如果是這樣,如何做到這一點?

UPDATE如果我有一個類(一個MySQL數據庫表)有10個屬性(表列),其值可以nilnull」(null),那麼我想執行查詢以返回其中存在10個屬性值中的至少3個的對象(記錄)(不是null而不是「」)。

+2

@Sergio Tulentsev - 該問題的答案是爲了幫助構建。 – Backo

+0

@Sergio Tulentsev - 我在MySQL上並不是很專業......也許可以通過一些「內部」的Ruby on Rails方法來實現... – Backo

回答

6

您可以比較反對測試每一列IS NOT NULLAND<>的總和:

WHERE ( (colA IS NOT NULL AND colA <> ' ') 
     + (colB IS NOT NULL AND colB <> ' ') 
     + ... 
     + (colJ IS NOT NULL AND colJ <> ' ') 
    ) >= 3 

這工作,因爲每個測試的布爾結果被隱式轉換爲任何1(如果爲true)或0(如果是假的);因此總和是既不是NULL也不是' '的列數。

或者,你可以處理使用IFNULL()NULL情況:

WHERE (IFNULL(colA<>' ',0) + IFNULL(colB<>' ',0) + ... + IFNULL(colJ<>' ',0)) >= 3 
+0

我更新了這個問題,因爲我正在尋找更微妙的解決方案。 .. – Backo

+0

@Backo:看到我更新的答案。 – eggyal

+0

我希望所有的答案都和你一樣......謝謝。 – Backo

相關問題