>  기사  >  데이터 베이스  >  mysql의 find_in_set 문자열 검색 기능 분석

mysql의 find_in_set 문자열 검색 기능 분석

WBOY
WBOY앞으로
2022-08-29 11:45:302349검색

추천 학습: mysql 비디오 튜토리얼

Requirements

시스템에서 주문이든 반품 주문이든 일부 플랫폼에서는 판매자 검토가 필요한 반면 다른 플랫폼에서는 그렇지 않으므로 주문을 설정하거나 반품할 수 있습니다. 시스템의 주문 반품 주문의 프로세스 노드입니다.

각 프로세스 노드에 대해 고객의 요구 사항은 시스템 하에서 직원의 역할에 따라 각 노드를 배포하여 회사 전체 직원이 주문을 처리하는 대신 개인에게 할당할 수 있어야 한다는 것입니다.

솔루션

위 시나리오에서 제가 구현한 솔루션은 처리할 해당 노드를 주문 테이블과 반품 주문 테이블 모두에 추가하여 여러 사람이 처리할 수 있는 경우 해당 노드를 분리하여 저장하는 것입니다. 직원 ID가 설정되었습니다.

따라서 주문을 쿼리하는 방법도 그에 맞게 수정해야 합니다. 모든 사람은 자신이 처리할 수 있는 주문만 볼 수 있습니다.

테이블의 샘플 내용은 다음과 같습니다.

직원이 시스템에 로그인하면 해당 ID를 얻을 수 있으며, 해당 필드에서 해당 ID를 검색해야 합니다. 비즈니스 검토, 재무 검토 또는 컬렉션의 위탁자에서. 이때 SQL은 어떻게 변경해야 할까요?

Function

SQL을 변경하기 전 제가 생각했던 것은 이전에 MYSQL의 많은 기능을 요약해 놓은 것이었고, 위의 구현에는 분명히 이를 달성하는 데 도움이 되는 해당 기능이 MYSQL에 있을 것입니다. 물론, 찾았습니다.

1. 소개

MySQL은 쉼표로 구분된 문자열 목록에서 지정된 문자열의 위치를 ​​찾을 수 있는 FIND_IN_SET()이라는 내장 문자열 함수를 제공합니다.

2. 구문: FIND_IN_SET(needle,haystack)

FIND_IN_SET() 함수는 두 개의 매개변수를 허용합니다:

  • needle은 찾을 문자열입니다. needle是要查找的字符串。
  • haystack
  • haystack은 검색할 문자열을 쉼표로 구분한 목록입니다.

FIND_IN_SET() 함수는 매개변수 값에 따라 정수 또는 NULL 값을 반환합니다.

  • needle 또는 haystack이 NULL인 경우 함수는 NULL 값을 반환합니다.
  • needle이 haystack에 없거나 haystack이 빈 문자열인 경우 0이 반환됩니다.
  • 바늘이 건초 더미에 있으면 양의 정수를 반환합니다.

3. 실전 전투

다음은 프로젝트 내 8910번 직원이 처리할 수 있는 업무 검토 대기 중인 주문의 SQL입니다.

SELECT
	t.id_,t.order_sn,t.create_time, t.business_employee_ids,cus.customer_title
FROM
	wms_orders t
LEFT JOIN wms_customer cus ON cus.id = t.buyer_id
WHERE
	t.order_status != 100
AND t.comp_id = 8815
AND FIND_IN_SET(
	'8910',
	t.business_employee_ids
)
AND t.order_status = 14
AND (
	t.parent_order_sn IS NULL
	OR t.parent_order_sn = ''
)
ORDER BY
	t.id_ DESC

결과는 다음과 같습니다.

스크린샷에서 위 결과에서 ID 6594, 6523, 6373으로 구성된 세 가지 주문은 직원 번호 8910에 의해서만 처리될 수 있습니다. 위의 SQL 직원 번호를 8912로 변경하면 이 세 가지 주문은 결과 범위 내에 있어서는 안 됩니다. 이 기능을 사용하여 쿼리하는 것이 가능한지 확인합니다.

쿼리 결과는 다음과 같습니다.

결과는 쿼리에 문제가 없음을 증명합니다.

Interlude

이틀 전 한 동료가 그룹에 스크린샷을 게시하고 다음과 같이 질문했습니다.

간단한 설명:

이미지 주소 열에는 이전 데이터 주소가 저장됩니다. 이제 새 데이터 센터가 온라인 상태이므로 사진을 얻으려면 새 주소로 바꿔야 합니다.

이 글을 읽다보니 예전에 MYSQL에서 문자열을 대체할 수 있는 REPLACE() 함수가 생각났습니다. 따라서 업데이트 설명은 다음과 같습니다.

UPDATE wms_platform_wear_brand
SET brand_img = REPLACE (
	brand_img,
	"http://***/udata/interface/timer/pic/getAttachPic.do?attachId=",
	"wms/orderGoods.do?method=getAttachPic&attachId="
)
권장 학습: mysql 비디오 튜토리얼

🎜

위 내용은 mysql의 find_in_set 문자열 검색 기능 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제