2012-09-26 160 views
0

我在從數據庫中檢索一些記錄時遇到了一些麻煩。我網站上的許多網頁都標有各種值以幫助搜索/組織。其中一個值是使用複選框設置的。如果在後端檢查該框,則該值爲「1」。如果它沒有被檢查,它是空白的。MySQL SELECT空白字段

這是我的SELECT聲明。它用於AJAX搜索網站訪問者以搜索產品。

SELECT *, 
MAX(CASE WHEN name = "is_active" THEN value END) AS is_active, 
GROUP_CONCAT(... 
... 
HAVING is_active LIKE "%'.$active.'%" 

我省略了一部分我的SELECT聲明以節省空間。

該聲明除了我給出的例子外完美無缺。如果訪問者沒有檢查前端的活動複選框,它將返回結果,就好像它已被選中...或等於「1」。如果該框被選中,則沒有變化。似乎我無法讓它返回is_active等於「」的記錄。我究竟做錯了什麼?

回答

1

聽起來好像數據庫中的字段的默認值爲NULL。您可以在HAVING條款添加第二個條件檢查此:

HAVING is_active LIKE "%' . $active . '%" OR is_active IS NULL 

編輯

我剛纔看到你在選擇列表中定義is_active。通過MAX(),空值將被忽略。您可以使用nested- CASE解決這個問題:

SELECT *, 
MAX(
    CASE WHEN name = "is_active" THEN 
     (CASE WHEN value IS NULL THEN 0 WHEN value = '' THEN 0 ELSE value END) 
    END 
) AS is_active 
... 
1

所以,如果$active是空白的,那麼你的查詢看起來像:

is_active LIKE "%%" 

這將返回所有行,該列不NULL。是否有理由需要使用通配符進行搜索?也許你只需要:

is_active = "'. $active .'" 

Here is an example that illustrates my point.