0

データベースからいくつかのレコードを取得するのに問題があります。私のサイトにあるページの多くは、検索/整理を支援するためにさまざまな値でタグ付けされています。これらの値の1つは、チェックボックスで設定されました。バックエンドでボックスがチェックされている場合、値は「1」です。チェックされていない場合は空白です。

これが私の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「」に等しいレコードを返すことができないようです。私は何が間違っているのですか?

4

2 に答える 2

1

データベースのフィールドのデフォルト値は。であるかのように聞こえますNULLHAVINGこれを確認するために、句に2番目の条件を追加できます。

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

編集

is_active選択リストで定義するのを見たばかりです。をMAX()指定すると、空の値は無視されます。ネストされた-を使用してこれ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
...
于 2012-09-26T16:06:16.687 に答える
1

したがって、$activeが空白の場合、クエリは次のようになります。

is_active LIKE "%%"

これにより、その列がないすべての行が返されますNULL。ワイルドカードを使用して検索する必要がある理由はありますか?おそらくあなたはただ必要です:

is_active = "'. $active .'"

これが私のポイントを説明する例です。

于 2012-09-26T16:09:02.577 に答える