0

プロジェクトの住所(郵便番号(zip)、名前、都市)でディーラーを検索する検索機能を開発しています。ユーザーには、検索語を入力するためのhtml入力フィールドが1つだけ提供されます(ユーザーは一度に1つの検索語のみを入力できます。つまり、郵便番号、名前、または都市のいずれかです(組み合わせは許可されません))。クエリを作成するための条件は次のとおりです。

  1. ユーザーが郵便番号で検索する場合、一致した結果は降順で表示される必要があります
  2. 名前が一致した結果でユーザーを検索する場合は、アルファベット順に表示する必要があります
  3. 都市名と同じ

名前に郵便番号が含まれている可能性がある場合もあります。その場合、結果は郵便番号で短縮する必要があります。

私はこのように試しました

select city, postcode, name
  from dealers
  where name ='xyz' OR
        postcode ='xyz' OR
        city='XYZ'
  ORDER BY postcode desc

しかし、私はすべての条件に対して「ORDERBY」が必要です。たとえば、「xyz」は、結果を昇順で並べ替えたい名と一致します。どうやってやるの?

4

2 に答える 2

2

すべての用語が昇順で並べ替えられていれば、作業が楽になります。

実際のアプリケーションは、ハードコードされた文字列ではなく変数を使用していると思います。したがって、ソリューションは次のようになります。

  select city, postcode, name
  from dealers
  where name = p_search_term OR
        postcode = p_search_term OR
        city = p_search_term
  ORDER BY case when postcode = p_search_term then p_search_term else 1 end desc
           , case when name = p_search_term then p_search_term else city end asc
于 2012-09-22T21:39:01.637 に答える
0

MySQL では、次のようにします。

     "SELECT `zip`, `name`, `city` FROM `dealers` WHERE `zip` = '$zip' ORDER BY `zip` DESC"
     "SELECT `zip`, `name`, `city` FROM `dealers` WHERE `name` = '$name' ORDER BY `name`"
     "SELECT `zip`, `name`, `city` FROM `dealers` WHERE `city` = '$city' ORDER BY `city`"

私はOracleを使用していませんが、同じだと思います。(このコードは、zip が varchar であると想定しています。整数値の場合は、' ' を削除するだけです)

于 2012-09-21T22:32:42.893 に答える