본문 바로가기
MySql

MySQL NOT LIKE 쿼리가 작동하지 않습니다.

by 베이스 공부 2020. 10. 19.
반응형

2 개의 테이블이 있습니다.

태그 테이블은 다음과 같이 구성됩니다.

따라서 게시물에 지정된 모든 태그에 대해 tags 테이블에 레코드를 만듭니다. 게시물에 10 개의 태그가있는 경우 해당 post_id와 함께 태그 테이블에 10 개의 레코드가 있습니다.

이제 사용자가 태그에 지정된 키워드가 포함되지 않은 게시물을 검색 할 수있는 검색 페이지를 구축하려고합니다. 그래도 문제가 발생합니다. 다음과 같은 쿼리 :

SELECT DISTINCT posts.id, posts.title, posts.content
   FROM jobs, tags
   WHERE tags.tag NOT LIKE '%$keywords%' AND posts.id=tags.post_id

게시물에 6 개의 태그가 있고 그중 하나에 키워드가있는 경우 태그 테이블의 다른 5 개 레코드에는 해당 키워드가 없기 때문에 여전히 반환됩니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 검색에만 사용되는 모든 쉼표로 구분 된 태그를 저장하는 posts 테이블에 새 열을 만드는 것 외에 다른 방법이 있습니까 ??

 

해결 방법

 

인덱스가 있는지 확인하십시오. 그렇지 않으면 성능이 매우 나빠질 것입니다.

SELECT posts.id, posts.title, posts.content
FROM posts 
WHERE NOT EXISTS (
  SELECT post_id from tags
  WHERE tags.tag LIKE '%$keywords%' 
    AND posts.id=tags.post_id
)

지정한 태그와 일치하는 태그가있는 게시물을 제외한 모든 게시물의 목록을 가져옵니다. (귀하의 원래 쿼리는 'jobs'테이블을 참조했습니다. 'posts'에 대한 오타라고 가정했습니다.)


SELECT p.id, p.title, p.content
FROM posts p
WHERE NOT EXISTS (
  SELECT t.post_id from tags t
  WHERE t.tag LIKE '%$keywords%' 
    AND p.id=t.post_id
)

그런 다음 다음 인덱스를 만듭니다.

Posts: id, tag_id
Tags: post_id, tag


 

참조 페이지 https://stackoverflow.com/questions/500790

 

 

반응형

댓글