2013-07-10 2 views
0

먼저 프로그래머가 아니며 스스로 완료하려고하는 프로젝트에서 Google로부터 배우려고합니다. 사용CodeIgniter SQL 아포스트로피를 포함하고 특정 열의 모든 열을 검색하는 쿼리

기술 : 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; 
} 

나는 이것이 잘못되었다는 것을 알고 있으며, 몇 가지 일을하는 것이 임시적이었습니다.

솔직히

ModelName 
Toy 
Other (All the rest) 

정렬 3 가지 범주로 그것을 깰 수있는 I 좋겠 또한 내가 매김을 지원하기 위해 구축,하지만이 무엇을 오프셋 및 한도 하드해서는 안됩니다 SQL 쿼리와 같은 나는 읽었다.

답변

3

당신은 통지를하지 않은 수도 있지만 오류가 조회에서이 당신의 열 이름과 MySQL은 또한 그래서 당신은` "다시 틱 당신에게 열 이름을 넣어 한 오류가 발생합니다 하는 기능을 가지고 당신이이 t 어떤 함수 이름을 충돌 할 확실하지 않은 경우가 order by를 들어이

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 col1,col2,col3

당신이 시작 인덱스와 MySQL을의 LIMIT 기능을 사용할 수있는 결과의 페이지 매김을 위해

LIMIT 0 , 10 같은 또는 처음 10 개 결과의 종료 인덱스는 단순히 LIMIT 10를 지정할 수는 제한합니다 내에서 유지 질의 끝에서 기본적으로 오름차순으로 결과 집합을 정렬하지만 결과 집합을 내림차순 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 '% {$ 키워드} %'OR 공간 LIKE '% {$ 키워드} %'OR

+0

+1 너무 많은 노력 .. –

+0

감사합니다,이 시간에해야한다 엘프! – Andrew

관련 문제