0

まず、私はプログラマーではなく、自分で完成させようとしているプロジェクトで Google から学ぼうとしています。

使用したテクノロジー: CodeIgniter 2.1.2、PHP 5.3、MySQL

ページに検索キーワード ボックスがあります。これを行うには、テーブル全体を検索し、特定の順序で結果を表示します。

私は現在、アポストロフィを使用せず、列ごとに結果を並べ替えないこの SQL クエリを持っています。

function search($keyword)
 {
  $query="SELECT *
  FROM HWC
  WHERE ModelName LIKE '%{$keyword}%' OR Toy LIKE '%{$keyword}%'OR Year LIKE '%{$keyword}%'
  OR Col LIKE '%{$keyword}%'OR Series LIKE '%{$keyword}%'OR Color LIKE '%{$keyword}%'
  OR Tampo LIKE '%{$keyword}%'OR BaseColor LIKE '%{$keyword}%'OR BaseType LIKE '%{$keyword}%'
  OR WindowColor LIKE '%{$keyword}%'OR InteriorColor LIKE '%{$keyword}%'OR WheelType LIKE '%{$keyword}%'
  OR Country LIKE '%{$keyword}%'OR 'Series#' LIKE '%{$keyword}%'OR Notes LIKE '%{$keyword}%'";

  $result=$this->db->query($query);
  $result=$result->result_array();

  return $result;
}

これが間違っていることはわかっています。いくつかのことを機能させるための一時的なものでした。

正直なところ、並べ替えのために3つのカテゴリに分けることができました

ModelName
Toy
Other (All the rest)

ページネーションをサポートするために作成した SQL クエリも欲しいのですが、読んだものからのオフセットと制限で難しくはないはずです。

4

1 に答える 1

3

気付かないかもしれませんが、クエリのにエラーがあり、列名であり、mysql にも関数のがあるため、不明な場合は、列名にバックティック " ` " を付けたというエラーが生成されます。任意の関数名と競合します。すべての列にバック ティックを追加することをお勧めします。これにより、競合する可能性がなくなり、次のようになります。

SELECT *
  FROM HWC
  WHERE `ModelName` LIKE '%{$keyword}%' OR `Toy` LIKE '%{$keyword}%' OR `Year` LIKE '%{$keyword}%'
  OR `Col` LIKE '%{$keyword}%'OR `Series` LIKE '%{$keyword}%' OR `Color` LIKE '%{$keyword}%' 
  OR `Tampo` LIKE '%{$keyword}%' OR `BaseColor` LIKE '%{$keyword}%' OR `BaseType` LIKE '%{$keyword}%'
  OR `WindowColor` LIKE '%{$keyword}%' OR `InteriorColor` LIKE '%{$keyword}%' OR `WheelType` LIKE '%{$keyword}%'
  OR `Country` LIKE '%{$keyword}%' OR `Series#` LIKE '%{$keyword}%' OR `Notes` LIKE '%{$keyword}% '

結果セットについてorder byは、次のような複数の列で並べ替えることができます

ORDER BY col1,col2,col3

結果のページ付けには、次のLIMITような開始インデックスと終了インデックスでmysqlの機能を使用しています

LIMIT 0 , 10または、最初の 10 個の結果についてLIMIT 10は、デフォルトでクエリの最後に制限が適用されるように keep in mine を指定できます。結果セットは昇順で並べられますが、結果セットを降順で並べたい場合は順序を指定できますDESC

SELECT *
  FROM HWC
  WHERE `ModelName` LIKE '%{$keyword}%' OR `Toy` LIKE '%{$keyword}%' OR `Year` LIKE '%{$keyword}%'
  OR `Col` LIKE '%{$keyword}%'OR `Series` LIKE '%{$keyword}%' OR `Color` LIKE '%{$keyword}%' 
  OR `Tampo` LIKE '%{$keyword}%' OR `BaseColor` LIKE '%{$keyword}%' OR `BaseType` LIKE '%{$keyword}%'
  OR `WindowColor` LIKE '%{$keyword}%' OR `InteriorColor` LIKE '%{$keyword}%' OR `WheelType` LIKE '%{$keyword}%'
  OR `Country` LIKE '%{$keyword}%' OR `Series#` LIKE '%{$keyword}%' OR `Notes` LIKE '%{$keyword}% '
ORDER BY `ModelName`, `Toy` LIMIT 0,10'

ノート

列名にバックティックを追加しない場合は、それらが一意であることを確認し、演算子、関数などの間にスペースを入れて、 LIKE '%{$keyword}%'OR のような列名にスペースLIKE 'を含める必要があります。 %{$keyword}%' または

于 2013-07-10T05:23:03.543 に答える