自作の検索機能のif分について

お世話になっております。

現在、検索窓を3つに設定し、下記のようなコードで検索機能を設定しているのですが、

function keyword_search(){
var keyword1 = search_word1.value;
var keyword2 = search_word2.value;
var keyword3 = search_word3.value;
var viewid = event.viewId
var str_query = '?view='+ viewid + '&' + 'query='+ 文字列1 +' like "' + keyword1 + ' and ' + 文字列2 +' like "' + keyword2 + ' and ' + 数値 +' = "' + keyword3;
document.location = location.origin + location.pathname + str_query
}

上記の場合、検索窓1~3まで全てに値が入っている場合しか検索ができないのですが、

例えば、検索窓1と3に値が入って検索窓2は空白の際にも検索が出来るようにしたいのですが

if(keyword1 == ""){
str_query = '?view='+ viewid + '&' + 'query='+ 文字列2 +' like "' + keyword2 + ' and ' + 数値 +' = "' + keyword3;
}else if(keyword2 == ""){
str_query = '?view='+ viewid + '&' + 'query='+ 文字列1 +' like "' + keyword1 + ' and ' + 数値 +' = "' + keyword3;
}else if(keyword3 == ""){
str_query = '?view='+ viewid + '&' + 'query='+ 文字列1 +' like "' + keyword1 + ' and ' + 文字列2 +' like "' + keyword2;
}

上記のような形で8通りの条件式を書く以外方法はないでしょうか?

お手数でございますが、ご確認お願い致します。

Nao様

お世話になっております。
サイボウズスタートアップスの江田です。

各条件式をまるごと変数にして、検索文字が空のときは1(true)を代入すればよいのではないでしょうか。
([条件1] AND 1 ≡ [条件1] なので)

function keyword_search(){
var condition1 = search_word1.value ? 文字列1 + ' like "' + search_word1.value + '"' : 1;
var condition2 = search_word2.value ? 文字列2 + ' like "' + search_word2.value + '"' : 1;
var condition3 = search_word3.value ? 数値 +' = "' + search_word2.value + '"' : 1;
var viewid = event.viewId
var str_query = '?view='+ viewid + '&' + 'query='+ condition1 + ' and ' + condition2 + ' and ' + condition3;
document.location = location.origin + location.pathname + str_query;
}

Naoさん、江田篤史さん

横から失礼します。
余計なquery条件は指定しない方がよいと思います。
いろいろ書き方がありますが、配列を使って下記のような方法もあります。
あとquery 部分は、URLエンコードが必要です。

function keyword_search(){
var query = [];
if (search_word1.value) query.push('文字列1 like "' + search_word1.value + '"');
if (search_word2.value) query.push('文字列2 like "' + search_word2.value + '"');
if (search_word3.value) query.push('数値 = "' + search_word2.value + '"');
var viewid = event.viewId
var str_query = '?view='+ viewid;
if (query.length > 0) {
str_query += '&query=' + encodeURI(query.join(' and '));
}
document.location = location.origin + location.pathname + str_query;
}

江田篤史様、rex0220様

ご返信ありがとうございます。また、ご返信が遅くなり申し訳ございません。

ご教授いただいたように設定をして、コードがだいぶスッキリしました。

今後ともよろしくお願いいたします。