like 와 INSTR 모두 말을 듣지 않습니다.
본문
안녕하세요
아래 테이블의 조회가 이상합니다.
SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM g5_write_ebook WHERE ((INSTR(wr_subject, '이상')) ) and (wr_num between -81 and (-81 + 10000))
코드의 결과가 3인 아닌 '1'이 나옵니다.
like를 사용해 보아도 마찬가지입니다.
SELECT COUNT(*) AS `cnt` FROM g5_write_ebook WHERE INSTR(wr_subject, '이상');
SELECT COUNT(*) AS `cnt` FROM g5_write_ebook WHERE wr_subject like '%이상%';
SELECT * FROM g5_write_ebook WHERE wr_subject like '%이상%';
모두 1이거나 하나의 row만 나옵니다.
테이블의 인코딩은 utf8_general_ci 입니다.
서버 환경입니다.
- 서버: Localhost via UNIX socket
- 서버 타입: MariaDB
- 서버 연결: SSL is not being used
- 서버 버전: 10.4.25-MariaDB - Source distribution
- 제품 버전: 10
- 사용자: root@localhost
- 서버 문자셋: UTF-8 Unicode (utf8mb4)
어찌된 것일까요?
!-->!-->답변 3
원하시는 답변이 될지는 모르겠지만 다음을 참고 하셔서 검토해 보시는건 어떨까 합니다.
1. g5_write_ebook 테이블에서 해당 조건에 맞는 데이터가 실제로 있는지 확인
SELECT * FROM g5_write_ebook WHERE INSTR(wr_subject, '이상') AND (wr_num BETWEEN -81 AND (-81 + 10000));
'이상'이 포함된 wr_subject를 가진 데이터가 존재하는지 확인해보세요.
이때, wr_num 조건도 함께 적용합니다.
2. 인덱스 확인
g5_write_ebook 테이블의 인덱스 상태를 확인해 보세요.
INSTR 함수나 LIKE 연산이 포함된 쿼리의 경우, 적절한 인덱스가 있는지 확인이 중요합니다.
SHOW INDEX FROM g5_write_ebook;
만약에 인덱스가없다면 인덱스를 추가해 보세요
3.
SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM g5_write_ebook WHERE INSTR(wr_subject, '이상') AND (wr_num BETWEEN -81 AND (-81 + 10000));
COUNT 결과가 예상과 일치하는지 확인할 수 있습니다.
만약 에러가 있다면 어떠한 에러가 출력되는지 확인해 보시고 적절한 조치를 하시면 되지 않을까 합니다.
!-->!-->!-->실제 데이터가 있는 위치와 확인하는 서버의 위치가 다를 경우의 상황이 있겠지만
그렇지 않을 경우 단순하게 equal 검색 했을때 결과가 나오지 않는다면
한글 조합형 이슈가 아닐까 싶습니다.
SELECT * FROM g5_write_ebook WHERE wr_subject = '단발 이상';
또는 다음처럼 강제 조합형태 검색을 통해 문제 확인을 해볼수 있을것 같습니다.
SELECT * FROM g5_write_ebook WHERE wr_subject like '%ㅇㅣㅅㅏㅇ%';
결과는 phpmyadmin에서 찍어보신건가요?아니면 php코드에서 fetch로 보신건가요?
답변을 작성하시기 전에 로그인 해주세요.