java - 如何解决where name like '%%' 当name 为null时,查询不到数据?
PHP中文网
PHP中文网 2017-04-18 10:44:56
0
12
1802
PHP中文网
PHP中文网

认证0级讲师

全員に返信(12)
巴扎黑

選択

リーリー

から

リーリー

どこで

リーリー

そして concat のような名前(

リーリー

名前のトラブルシューティングを書きました。他のものはご自身で確認してください。最善の解決策ではない可能性があります

いいねを押す +0
迷茫

必ずしもSQLでなくても、ビジネスロジックで書くことができます

いいねを押す +0
大家讲道理

データベース フレームワークが使用されているかどうかはわかりません。使用されている場合は、通常、対応するソリューションがあります。
たとえば、mybatis では、iftest を使用して like ステートメントを実行する必要があるかどうかを判断できます。

もう 1 つの方法は、IF(expr1,expr2,expr3) や IF ELSE などのデータベース自体の関数を使用することです

いいねを押す +0
Peter_Zhu

フロントエンドに入力パラメータがない場合、なぜこのフィールドの結果をクエリする必要があるのでしょうか?これはビジネスロジックに違反していませんか?

いいねを押す +0
Peter_Zhu

where IFNULL(name, '') like '%xx%' および IFNULL(method, '') like '%xx%'
name が null空の文字列に変換すると、%%が一致します。 where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
如果namenull将其转换为empty string%%就能匹配上了。


不过我认为最好的做法还是使用SQL的地方增加逻辑判断会比较好一些,改动量应该非常少,只需要几句代码就搞定了。题主可以看看@家常菜 的SQL增加一个where 1=1的条件,那if

ただし、SQL を使用して論理的な判断を追加するのが最善の方法だと思います。変更の量は非常に少なく、数行のコードのみで完了します。質問者は @家客菜 の SQL を見て where 1=1 条件を追加すると、if 条件。 🎜
いいねを押す +0
左手右手慢动作

ビジネス ロジック層で記述するのが最善です (この層はこの層が行うことになっています)。これは非常に不合理で非効率です。

いいねを押す +0
左手右手慢动作

簡単な方法は、テーブル内のnull値を「」に変換することです
where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
効率を考えなければこれで十分です

いいねを押す +0
Ty80

質問者は、インターフェイス上のクエリ条件を SQL ステートメントの Where 条件に単純に接続したいと考えています。これは確かにプログラム処理にとって非常に便利ですが、セキュリティ上の理由から、これは行わない方がよいでしょう。 SQLインジェクション。

内部アプリケーションの場合、この環境は確かに非常に安全です。パフォーマンスを考慮すると、このパラメーターを使用せずに、対応する where 句をスプライスしないでください。 Java では次のように記述できます:

リーリー

*以下は仮定です:

  1. nameStrとmethodStrはそれぞれインターフェースから取得したユーザー入力内容です。ユーザーが入力しない場合、結果はnull

  2. ではなく空の文字列になります。
  3. xxxxxx は他の where 条件です。実際に他に条件がない場合は、「where」文字列自体を処理する必要があります*

いいねを押す +0
刘奇

データベースのデフォルト値がnullの場合、または取得した値がnullの場合はnuに変更します。 。

いいねを押す +0
Peter_Zhu

ここで name='' または Method ='' または '%%' のような名前と '%%' のようなメソッド

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート