programing

WHERE 절에서 mysql concat()을 사용하고 있습니까?

bestcode 2023. 1. 15. 17:06
반응형

WHERE 절에서 mysql concat()을 사용하고 있습니까?

테이블에서 이름 열과 성 열로 검색하려고 합니다.현재 필드의 검색어를 수락하고 두 열과 한 번에 하나씩 비교합니다.

    select * from table where first_name like '%$search_term%' or 
    last_name like '%$search_term%';

이것은 단일 단어 검색어로 올바르게 작동하지만 결과 세트에는 "Larry"라는 이름을 가진 모든 사용자가 포함됩니다.하지만 만약 누군가가 이름 뒤에 공백, 그리고 성을 입력한다면, 나는 더 좁은 검색 결과를 원합니다.나는 다음을 시도했지만 성공하지 못했다.

    select * from table where first_name like '%$search_term%' or last_name 
    like '%$search_term%' or concat_ws(' ',first_name,last_name) 
    like '%$search_term%';

조언 좀 해주시겠어요?

EDIT: 테스트하는 이름은 "래리 스미스"입니다.DB는 "first_name" 열에 "Larry"를 저장하고 "last_name" 열에 "Smith"를 저장합니다.데이터는 깨끗하고 공백이 없으며 검색어는 왼쪽과 오른쪽으로 잘립니다.

편집 2: 나는 오늘 아침에 로버트 갬블의 대답을 시도했다.그의 것은 내가 어젯밤에 뛰던 것과 매우 유사하다.설명할 수는 없지만, 오늘 아침에는 효과가 있어요.유일하게 생각할 수 있는 차이점은 어젯밤 concat 함수를 검색 쿼리의 세 번째 "또는" 세그먼트로 실행했다는 것입니다(first_name과 last_name을 살펴본 후).오늘 아침, 상기와 주소, 업소명을 조사해 마지막 세그먼트로 실행했습니다.

쿼리 끝에 mysql 함수를 실행하면 중간보다 더 잘 작동합니까?

현재 가지고 있는 것은 기능해야 하지만 다음과 같이 줄일 수 있습니다.

select * from table where concat_ws(' ',first_name,last_name) 
like '%$search_term%';

이 기능이 작동하지 않는 예시와 검색어를 제공해주실 수 있습니까?

검색 쿼리는 대소문자를 구분합니다.

사용시

SELECT * FROM table WHERE `first_name` LIKE '%$search_term%'

그것은 "래리"와 "래리"에 모두 어울릴 것이다.이 concat_ws에서는 갑자기 대소문자가 구분됩니다!

이 문제는 다음 쿼리를 사용하여 해결할 수 있습니다.

SELECT * FROM table WHERE UPPER(CONCAT_WS(' ', `first_name`, `last_name`) LIKE UPPER('%$search_term%')

편집: 이 기능은 바이너리가 아닌 요소에서만 작동합니다.mynameispaulie의 답변도 참조하십시오.

SELECT *,concat_ws(' ',first_name,last_name) AS whole_name FROM users HAVING whole_name LIKE '%$search_term%'

...당신이 원하는 걸지도 몰라요.

Luc 앞으로:

당신의 답변에 동의합니다만, UPER는 비바이너리 요소에서만 작동한다는 것을 덧붙이고 싶습니다.AGE 열(또는 숫자)을 사용하는 경우, UPER 기능이 올바르게 작동하려면 CAST 변환을 수행해야 합니다.

SELECT * FROM table WHERE UPPER(CONCAT_WS(' ', first_name, last_name, CAST(age AS CHAR)) LIKE UPPER('%$search_term%');

Luc의 대답에 직접 대답하지 않은 것을 용서하십시오. 하지만 아무리 생각해도 어떻게 대답해야 할지 알 수가 없었습니다.관리자가 제 글을 옮길 수 있다면 옮겨주세요.

(mysql에서 작업) 다른 SQL도 가능합니다.이것만 시험해 보세요.

select * from table where concat(' ',first_name,last_name) 
    like '%$search_term%';

방해가 될 수 있는 몇 가지 사항이 있습니다. 데이터가 깨끗한가요?

이름 필드의 끝에 공백이 있을 수 있습니다.즉, 이름과 성 사이에 공백이 2개 있는 경우가 있습니다.trim(first_name)/trim(last_name)을 사용하면 이 문제가 해결되지만, 실제 수정은 데이터를 업데이트하는 것입니다.

또한 두 단어가 모두 발생하지만 반드시 함께 발생하지는 않는 곳에 일치시킬 수도 있습니다($search_term 변수가 시사하는 php에 있다고 가정함).

$whereclauses=array();
$terms = explode(' ', $search_term);
foreach ($terms as $term) {
    $term = mysql_real_escape_string($term);
    $whereclauses[] = "CONCAT(first_name, ' ', last_name) LIKE '%$term%'";
}
$sql = "select * from table where";
$sql .= implode(' and ', $whereclauses);

다음과 같이 시험해 보십시오.

select * FROM table where (concat(first_name, ' ', last_name)) = $search_term;

언급URL : https://stackoverflow.com/questions/303679/using-mysql-concat-in-where-clause

반응형