Pythonはsql文を使ってmysqlデータベースの多条件ぼかし検索の構想に対して詳しく説明します。



def find_worldByName(c_name,continent):
    print(c_name)
    print(continent)
    sql = " SELECT * FROM world WHERE  1=1 "
    if(c_name!=None):
        sql=sql+"AND ( c_name LIKE '%"+c_name+"%' )"
    if(continent!=None):
        sql=sql+" AND ( continent LIKE '%"+continent+"%') "
    sql=sql+" AND dt=(SELECT dt FROM world order by dt desc limit 1) order by confirm desc "

          # "AND continent LIKE '%%%%%s%%%%'" \
          # " order by dt desc " %(c_name,continent)
    # sql_temp = " SELECT * FROM world WHERE c_name LIKE '%"+c_name+"%' "
    res = query(sql)
    list= []
    for i in res:
        # print(i)
        list.append(i)
    return list;
背景:
ページの検索ボックスは二つの検索条件があります。一つは国家で、一つは大陸です。
データベースを調べている時に問題が発生します。国から伝えられた値がNoneならANDで接続されたsql文を使うとこの条件が適用されます。
全体的にfalseと判定されます。つまりもう一つの照会条件「大陸」は無効になります。パラメータにこのようなエラーが発生するのを防ぐためです。sql語を書いています
文の場合は、パラメータが空かどうか判断条件を付けて、レイヤーごとにsql文を追加します。
考え方:
まず最初のsql文を使います。

sql = " SELECT * FROM world WHERE 1=1 "
その後、レイヤーごとにパラメータが空かどうかを判定して、sql文をつづり合わせます。

if(c_name!=None):
          sql=sql+"AND ( c_name LIKE '%"+c_name+"%' )"
      if(continent!=None):
          sql=sql+" AND ( continent LIKE '%"+continent+"%') "
      sql=sql+" AND dt=(SELECT dt FROM world order by dt desc limit 1) order by confirm desc "
もう一つの注意点があります。
sql文はパラメータを伝えます。パラメータは変数です。二つの方法があります。
①直接sql文に綴り付ける:

var c_name="test"
sql_temp = " SELECT * FROM world WHERE c_name LIKE ' %"+c_name+"% '"
②プレースホルダ%を使用して、文末にプレースホルダを置換します。

sql = " SELECT * FROM world WHERE c_name LIKE '%%%%%s%%%%' AND continent LIKE '%%%%%s%%%%'" %(c_name,continent)

Tomorrow the birds will sing.
ここでPythonについてsql文を使ってmysqlデータベースの多条件ボケ検索の考え方を詳しく紹介します。Python mysql多条件ボケ検索の内容は以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。