ユーザーからの入力を取得した後、DAO クラスで構築しているこのクエリがあります。ユーザーが提供する約 10 のオプションを備えた基本的な検索機能です。以下のクエリを作成しました。
- ユーザーは日付の範囲を指定します。
- ユーザーは家賃の範囲を提供します。
- ユーザーは、画像を含むレコードを表示するオプションを選択します。
- このクエリのステータス フラグは 1 である必要があります。
- タイトルによる検索とは、上記の 1 ~ 4 のポイントを満たし、ユーザーが指定したキーワードで、列のタイトルを like 演算子で検索することを意味します。
- 最後に、結果が日付順にソートされます。
.
select SQL_CALC_FOUND_ROWS *
from `database`.`table`
WHERE (Date(ctimestamp) BETWEEN '2011-12-02' and '2012-12-06') and (crent BETWEEN '' and '')
and (cimg1 IS NOT NULL or cimg2 IS NOT NULL or cimg3 IS NOT NULL or cimg4 IS NOT NULL or cimg5 IS NOT NULL or cimg6 IS NOT NULL or cimg7 IS NOT NULL or cimg8 IS NOT NULL)
and cflag = 1 and ctitle LIKE '%Testing%'
order by Date(ctimestamp) desc Limit 0, 100
すべてのパラメーターはフロントエンドから取得されます。このクエリでは、同じパラメーターと条件を持つ 13 近くのレコードがありますが、mysql クライアントを実行すると、0 レコードが書き込まれます。
このクエリは私にデータを正しく与えます、
select SQL_CALC_FOUND_ROWS *
from `database`.`table`
WHERE (Date(ctimestamp) BETWEEN '2011-12-02' and '2012-12-06')
and (cimg1 IS NOT NULL or cimg2 IS NOT NULL or cimg3 IS NOT NULL or cimg4 IS NOT NULL or cimg5 IS NOT NULL or cimg6 IS NOT NULL or cimg7 IS NOT NULL or cimg8 IS NOT NULL)
and cflag = 1 and ctitle LIKE '%Testing%'
order by Date(ctimestamp) desc Limit 0, 100
両者の違いはこの部分
and (crent BETWEEN '' and '')
ユーザーがこれらのフィールドをスキップすることを計画している場合、この状況をどのように処理するかが疑問です.いくつかの洞察に感謝します.