2011-02-05 6 views
0

검색 필드가 있고 그 단일 텍스트 상자를 사용하여 사용자가 이름으로 갤러리와 이미지를 모두 찾을 수있게하려고합니다. 문제는 구문에 문제가없고 오류가 발생하지 않아도 내 쿼리에서 결과를 얻지 못하는 것입니다.좋은 SQL 검색은 어떻게합니까?

다음과 같은 시나리오가 있습니다. 내 그룹 이름이 "Liten gruppe!"이고 검색 문자열이 "liten"입니다. 대/소문자를 구분하지 않는 검색의 경우 검색 문자열과 결과 문자열이 모두 소문자로 전환됩니다.

구문에서 뭔가가 예상치 못한 일을해야합니다. OK, 바보 같은 실수 : 어떤 도움


편집에 대한

SELECT `id` 
FROM gallery_groups 
WHERE `name` LIKE LOWER('%$searchstring%') OR 
     `date_created` LIKE LOWER('%$searchstring%'); 

감사합니다. 그러나 보정은 여전히 ​​결과를 얻을 수 없습니다 :

SELECT `id` 
FROM gallery_groups 
WHERE LOWER(`name`) LIKE '%$searchstring%' OR 
     LOWER(`date_created`) LIKE '%$searchstring%'; 

편집 : 재미! 결과 쿼리를 PhpMyAdmin에 직접 복사하면 결과가 일치합니다. 그러나 PHP에서 호출 할 때 어떤 행도 발생하지 않습니다. 어떻게 그렇게 될수 있니?


편집 : 확인 결과, 실제로 결과가 1 개 반환됩니다. 어떤 결과가 (fetch_object을 실행하는 것보다 다른이있는 경우

결과의 모든 필드가 null의 경우
object(mysqli_result)[3] 
    public 'current_field' => null 
    public 'field_count' => null 
    public 'lengths' => null 
    public 'num_rows' => null 
    public 'type' => null 

이 어떻게 가능하게 알 수 있습니다) : 나는 결과의 덤프 출력에 속지했다?

WHERE `name` COLLATE UTF8_GENERAL_CI LIKE '%$searchstring%' OR 
     `date_created` COLLATE UTF8_GENERAL_CI LIKE '%$searchstring%'; 

디버깅을위한 AS : 그들이 볼 수있는 데이터베이스에 전달되는 당신이 정말 의도 한 검색 문자열을 사용하는 경우, SQL 쿼리를 인쇄 해 봅니다 당신은 LOWER없이 MYSQL에서 대소 문자를 구분 검색을 실행할 수 있습니다

+0

검색어에 검색어를 넣으시겠습니까? –

+0

코드가 생성 한 쿼리를 인쇄하여 PHP 외부의 데이터베이스에 대해 직접 실행 해 보았습니까? 그것은 일반적으로 쉬운 실수를 보여줍니다. –

+0

@Sarah Happy : 예, 저도 해 봤습니다. @ 단 그로스맨 : 나는 그것을하지 않았습니다. 내가 그것을 밖으로 시도하자 – Hubro

답변

1

.

+0

그런 다음 어떻게 대/소문자를 구분하는 검색을 수행합니까? 또한 문자 인코딩을 UTF8로 변경하지 않으면 내 문자가 손상됩니까? (I.E., Ø, Å) – Hubro

+1

문자 집합 (인코딩)과 데이터 정렬을 혼동하지 마십시오. 데이터 정렬은 순서 만 정의합니다 (어떤 문자가 다른 문자보다 먼저 나오고 어떤 문자가 동등한 것으로 간주되는지). 대/소문자 구분 검색을 수행하려면 대/소문자 구분 데이터 정렬을 사용하십시오. –

+0

나는 UTF8을 사용할 필요가 없다고 덧붙여 야한다. MySQL은 30 개 이상의 문자 집합에 대해 70 개 이상의 데이터 정렬을 지원합니다. http://dev.mysql.com/doc/refman/5.1/en/charset-charsets.html –

0

이 쿼리는 모든 행을 반환하는 경우 당신이 밖으로 찾는 데 도움이 있는지 확실하지 않습니다. 그러나 이것은 내가하는 방법입니다.

$ strSQL = "SELECT id"; $ strSQL. = "FROM gallery_groups"; $ strSQL. = "WHERE LOWER (name) LIKE '% $ searchstring %'OR"; $ strSQL. = "LOWER (date_created) LIKE '% $ searchstring %'";

$ rec = mysql_query ($ strSQL, $ oConn);

if (mysql_num_rows ($ rec)> 0) { $ strName = mysql_result ($ rec, 0, "name"); $ strDateCreated = mysql_result ($ rec, 0, "date_created"); }

관련 문제