안녕하세요. 얼마전에 태터스토리랑 겹쳐서 문제가 있었던 isloco 운영자입니다.
저희쪽에 태그 클라우드 관련한 문제가 올라와서 소스를 살펴보고, 올립니다.
관련한 문제가 이미 리포팅 되어있을 꺼 같은데 검색을 해보니 아직 없는 것 같기도 하고 그러네요.
-- 질문 daydreamer.isloco.com 에서 발생
다름이 아니고 태그 목록에서 좀 이상한 점이 보여서 그러는데요. 태그 클라우드에 분명 한번밖에 안 쓴 태그들의 색깔이 진하게 나오길래 이상해서 태그 목록을 봤더니 다음과 같이 보였습니다.
(로그인 안한 상태)
http://anyang.kaist.ac.kr/~daydreamer/tag_nologin.JPG
그런데 로그인을 하고 나니 다음처럼 제대로 보이더라구요.
http://anyang.kaist.ac.kr/~daydreamer/tag_login.JPG
대강 보아하니 최근에 쓴 글들의 태그들은 제대로 (사용된 횟수에 따라) 표시되는 게 맞는데, 옛날 글들에 쓰여진 태그는 그렇지 않은 것 같습니다.
데이터 교정을 해봐도 그대로구요. 무슨 문제일까요? @_@
-- 저희쪽 답변 DEW (dew.isloco.com)
테터버그라고 하긴 그렇고... 테터가 중간에 뭔가 바뀐 거 같은데. 아님 import 할때 생기는 문제거나...
곰곰히 생각해보니 최근, 예전 쓴 글 문제로 볼 수도 있을만한 문제..
로긴했을때랑 안했을때 해당 태그에 대해 총 개수를 가져오는 SQL 문이 다른데.
로긴 안 했을때 비공개글에 있는 태그 카운트하지 않을려고 하는 SQL 이 다음과 같은데.
getTagFrequency 함수에서 로긴 안 한 경우
"SELECT count(*) FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r, `{$database['prefix']}Entries` e WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.owner = $owner AND t.name = '".mysql_tt_escape_string($tag)."'"
여기서 e.id 가 unique 하다고 가정하고 쓰고 있는 거 같은데.. db schema 에서 auto_increment 니까 어느정도 맞는 가정이기도 한데. 정확히는 (owner,id,draft) 쌍이 unique 하기 때문에.. 아마 이전 버전에서나 import 같은 거 하면 id 가 겹치는 게 생길 수도 있는 거 같은데 정확히 어떤 경우에서 생기는지는 아직 모르겠음. 결론은 Entries table 에 id 가 겹치는 record 가 있어서 생긴 문제임..
하지만 결론은 마찬가지. Entries table 에 대해 조건을 하나 더 넣어주면 됨. r.owner = e.owner 라는 조건..
물론 다른 식으로도 해결은 가능함.
"SELECT count(*) FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r, `{$database['prefix']}Entries` e WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.owner = e.owner AND r.owner = $owner AND t.name = '".mysql_tt_escape_string($tag)."'"