이것은 간단하지만 동시에는 아닙니다.그렇지 않은 경우 룩 쿼리를 단축하려고 시도합니다.
사용자가 이름을 입력하는 기본 검색 상자가 있습니다. first_name
및 last_name
으로 만 구성된 이름입니다. 표는 first_name
, last_name
, display_name
곳 firs_name
및 last_name
분명히 어떤 성과 이름있는 열을 가지고 있으며, display_name
이 first_name
및 last_name
의 연결 또는 Bill Smith
의 표시 이름이있을 수 있습니다 선호하는 이름 때문에 William Smith
중 하나입니다.
wackyness :
첫 번째 이름과 마지막 이름을 모두 두 번 이름이 될 수 있습니다. 그함으로써 나는 우리가 최상의 시나리오는, 이름이 Anna Smith
을 것
First Name: Anna Maria Last Name: Smith
First Name: Anna Last Name: Bo Johnson
First Name: Anna Maria Last Name: Bo Johnson.
같은 이름을 가질 수있는 의미하지만이 작업을 수행해야 할 정도로 최악의 시나리오
Anna Maria Bo Johnson
있어.
Anna Maria Bo Johnson
에 대한 사용자 검색이 나는 첫 번째 또는 마지막 이름이며, 슬프게도 이중 첫번째 이중 성이 Anna Bo Maria Johnson
같은 84 개 조합을 가진 4 "단어"의 어느 인식하지의 쿼리를 실행해야
Bo Maria Johnson Anna
등 ...
지금 내 문제는, 내가 내 MySQL의 쿼리가 긴 같은 84 개 라인이 될 싶지 않다 :
SELECT * FROM tablename a
WHERE
(a.first_name = '$search_term[0]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[0]' AND a.last_name = '$search_term[2]') OR
(a.first_name = '$search_term[0]' AND a.last_name = '$search_term[1] $search_term[2]') OR
(a.first_name = '$search_term[0]' AND a.last_name = '$search_term[2] $search_term[1]') OR
(a.first_name = '$search_term[1]' AND a.last_name = '$search_term[0]') OR
(a.first_name = '$search_term[1]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[1]' AND a.last_name = '$search_term[0] $search_term[2]') OR
(a.first_name = '$search_term[1]' AND a.last_name = '$search_term[2] $search_term[0]') OR
(a.first_name = '$search_term[2]' AND a.last_name = '$search_term[0]') OR
(a.first_name = '$search_term[2]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[2]' AND a.last_name = '$search_term[0] $search_term[1]') OR
(a.first_name = '$search_term[2]' AND a.last_name = '$search_term[1] $search_term[0]') OR
(a.first_name = '$search_term[0] $search_term[1]' AND a.last_name = '$search_term[2]') OR
(a.first_name = '$search_term[1] $search_term[0]' AND a.last_name = '$search_term[2]') OR
(a.first_name = '$search_term[0] $search_term[2]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[2] $search_term[0]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[1] $search_term[2]' AND a.last_name = '$search_term[0]') OR
(a.first_name = '$search_term[2] $search_term[1]' AND a.last_name = '$search_term[0]') OR
a.display_name = '$search_term[0] $search_term[1] $search_term[2]' OR
a.display_name = '$search_term[1] $search_term[2] $search_term[0]' OR
a.display_name = '$search_term[2] $search_term[1] $search_term[0]'
ORDER BY last_name, first_name ASC
이 그래서 좋은 빠르고 더 효율적 일 것입니다 무슨 (3 단어 이름 예) 이 쿼리를 작성하는 방법. 기본적으로 나는 각 단어를 임의의 단일 단어 또는 2 단어 조합의 모든 필드와 비교 (=)해야합니다.
미리 도움 주셔서 감사합니다.
case $ iterial = $ search_term []은 explode()를 사용하여 "Anna Maria Bo Johnson"이라는 단어를 공백으로 나눠서 만든 배열입니다. – ipixel
LIKE 연산자를 사용할 수 있습니다 (http://www.w3schools.com). /sql/sql_like.asp) 쿼리에 있지만 여러 결과를 얻을 것이다. 검색의 요점은 정확히 하나의 결과가 올 것입니까? –
필자는 "정확한"검색 결과를 제외한 모든 것을 제공하는 AND 입력 필드 (NOT FROM FROM ...)와 함께 LIKE를 사용하는 별도의 쿼리를 사용합니다. – ipixel