3

db のフィールドが 10 シンボル未満の場合は、強力ではない like で検索し、10 を超える場合は %% オプションよりも検索するにはどうすればよいですか? では、フィールドの長さを確認するにはどうすればよいでしょうか。

ルビーでの私のコードは次のとおりです。

@search = CrossList.find(:all, :conditions => ['cross_value like ? ', oem_condition]) 

しかし、次のようなことをする方法:

@search = CrossList.find(:all, :conditions => ['length(cross_value) < 10 and cross_value like ? ', oem_condition]) 

そうしないと

 @search = CrossList.find(:all, :conditions => ['length(cross_value) >= 10 and cross_value like %?% ', oem_condition]) 
4

1 に答える 1

2

2 つの条件を組み合わせて使用OR​​します。

@search = CrossList.find(:all, :conditions => [
   "(length(cross_value) >= 10 AND cross_value like CONCAT('%',?,'%')) OR (length(cross_value) < 10 AND cross_value like ?) ",
    oem_condition,
    oem_condition
]) 

条件はLENGTH()2 つの()グループのいずれかで満たされている必要があり、どちらが満たされていても、そのLIKE条件ANDが適用される必要があります。

于 2013-02-06T19:59:43.530 に答える