반응형
변수 개수의 모수에서 여러 열을 검색합니다.
나는 사용자가 하나 이상의 단어를 입력할 수 있는 검색 입력 상자를 가지고 있고 php 스크립트는 모든 단어가 열에 포함된 모든 행을 반환해야 합니다.
다음과 같은 표를 가정합니다.
|car_id|make|model|year|plate|
+----------------------------+
| 1 |Audi|A4 |2010|AAAAA|
| 2 |Audi|A4 |2012|AAAAB|
| 3 |Audi|Q5 |2010|AAAAC|
+----------------------------+
사용자가 "Aud"를 입력하면 3개의 행을 얻게 됩니다.'2010 아우디'에 들어가면 1열과 3열을, '오디오 q5 2010'에 들어가면 3열만 받습니다.
내가 한 일.
만약 입력이 단지 1개의 항으로 이루어진다면, 나는 다음과 같은 쿼리를 만들 수 있습니다.
SELECT * FROM car WHERE make LIKE '%term%' OR model like '%term%' OR year like '%term%'
사용자가 2개의 항을 입력하면 대신 이 쿼리를 작성해야 합니다(플레이트 열은 고려하지 않음).
SELECT * FROM car WHERE
(make LIKE '%term%' AND model LIKE '%term2%')
OR (make LIKE '%term2%' AND model LIKE '%term%')
OR (make LIKE '%term%' AND year LIKE '%term2%')
OR (make LIKE '%term1%' AND year LIKE '%term%')
OR (model LIKE '%term%' AND year LIKE '%term%')
OR (model LIKE '%term2%' AND year LIKE '%term1%')
사용자가 3개의 항을 입력하면 쿼리가 기하급수적으로 더 복잡해집니다.
MATCH 키워드에 대해 읽었지만 일부 열은 텍스트가 아닙니다. 이 예제의 연도처럼 말입니다.
이런 종류의 검색을 하는 올바른 방법은 무엇입니까?데이터베이스 스키마를 변경해야 합니까?검색 가능한 모든 열을 문자열에 넣고 약간의 정규 함수를 수행합니다.
감사해요.
- 추가 열을 만듭니다.
all
. 그것에 포함시키세요.CONCAT_WS(' ', ...)
검색해야 할 모든 열 중에서. - 만들기
FULLTEXT(all)
그 열에 색인을 만듭니다. 단 하나의 절로 쿼리를 구성합니다.
WHERE MATCH(all) AGAINST("+Audi +q5 +2010" IN BOOLEAN MODE)
문제:
FULLTEXT
는 최소 단어 길이를 갖습니다. 를 변경하거나(아, 글로벌 설정입니다), 짧은 "단어"를 다르게 취급합니다.예를 들어, min word len이 3이라면, q5 앞에 있는 '+'를 제거합니다.AGAINST
끈을 매다그렇지 않으면 InnoDB에서 행을 찾을 수 없습니다.- 마찬가지로 "멈춤말"을 다루게 됩니다.또는 중지 목록을 제거합니다.
- 하이픈 등의 단어를 어떤 식으로든 처리합니다.
- 하는 것이 도움이 될 것입니다.
ORDER BY MATCH ... LIMIT 20
(1) 오드볼 케이스에 약간의 선호를 부여하고, (2) 사용자가 충분히 지정하지 않은 경우 출력을 제한합니다. - 아니면 정정당당하게 경기를 하고 싶을 수도 있습니다.
ORDER BY RAND() LIMIT 20
.
5.7 또는 MariaDB를 사용하는 경우 "생성된" 열이 유용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/49073567/search-table-multiple-columns-on-variable-number-of-parameters
반응형
'source' 카테고리의 다른 글
사전순서란 무엇입니까? (0) | 2023.10.01 |
---|---|
Memset(…, 0, …)을 여러 겹의 겹침에 사용하는 것이 합법입니까? (0) | 2023.10.01 |
도커 컨테이너 내에서 Nginx를 중단하지 않고 실행하는 방법? (0) | 2023.10.01 |
추가 기능을 사용자 지정할 수 있도록 .ppam 파일 (0) | 2023.10.01 |
wo commerce in word press return 항상 단순한 제품 유형 (0) | 2023.10.01 |