문제

이 테이블이 있습니다 : posts (post_is, title and text), tags (tag_id, tag), post_tag_nn (id, tag_id, post_id). 예를 들어 4 개의 태그가 해당 태그와 함께 모든 게시물을 태그 한 다음 3 개의 태그가있는 모든 게시물을 갖는 특정 게시물을 원합니다. 그 다음 모든 게시물이 해당 태그 등이있는 게시물 등을 원합니다. 이 목적을 위해 SQL 쿼리를 어떻게 구축 할 수 있습니까 (PHP에서는 역 추적 문제처럼 보입니다 = 주어진 세트의 모든 서브 세트).

도움이 되었습니까?

해결책

현재 게시물의 태그를 찾을 수있는 쿼리가 있습니다.

SELECT tag_id
FROM Post_tag_nn
WHERE post_id = $post_id;

그런 다음 해당 태그 ID를 사용하면이 쿼리가 4,3,2, 일치하는 태그가있는 게시물의 ID를 반환해야합니다.

SELECT post_id, COUNT(post_id) AS tag_count
FROM Post_tag_nn
WHERE tag_id IN ($array_of_tag_ids)
GROUP BY post_id
ORDER BY tag_count DESC;

다른 팁

태그 중 하나를 단 하나의 태그로 뽑아 내려면 태그 당 단일 쿼리를 실행하여 해당 태그로 모든 게시물을 끌어 당긴 다음 세트를 직접 생성하는 것이 가장 좋습니다.

같은 것 :

select t.id, t.tag_id, p.post_id, p.title, p.text
  from post_tag_nn as t, posts p
  where p.id = t.post_id
  order by t.id

그런 다음 코드에서 그룹을 수행하십시오. 물론 두 가지 다른 쿼리를 수행 할 수 있습니다. 하나는 태그의 순서와 수를 알아 내고 각 태그에 대한 게시물을 뒤로 당기는 곳입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top