2012-06-27 3 views
1

현재 사진 작가를위한 웹 사이트에서 작업하고 있습니다. 모든 사진에는 업로드 할 때 추출되는 여러 개의 키워드가 태그되어 있습니다.DISTINCT (내부 조인 있음)

내 데이터베이스는 다음과 같습니다 (간체)

TAGS 
------------------- 
|  |   | 
|  |   | 
| ID | TAG  | 
|  |   | 
|  |   | 
------------------- 

IMAGES 
------------------- 
|  |   | 
|  |   | 
| ID | URL  | 
|  |   | 
|  |   | 
------------------- 

TAGS_IMAGES 
------------------- 
|  |   | 
| TAG | IMAGE | 
| ID | ID  | 
|  |   | 
|  |   | 
------------------- 

그래서 모든 태그 중복을 방지하기 위해 구분 테이블에 저장됩니다, 동일 이미지에 간다 다음 태그와 이미지가 다른 테이블에서 서로 연결되어 .

태그 검색, 나는 주어진 태그

SELECT DISTINCT SQL_CALC_FOUND_ROWS tags.tag, tags_image.imageID, images.src FROM tags INNER JOIN tags_image ON tags.tagID = tags_image.tagID INNER JOIN images ON tags_image.imageID = images.id WHERE tag LIKE ? ORDER BY id DESC LIMIT ?, ? 

를 기반으로 모든 이미지를 찾으려면이 SQL을 실행하지만 문제는 DISTINCT 만에 작동하는 것 같다 때문에 여전히 다수의 중복을 얻고 있다는 것입니다 tag.id.

여기에서 볼 수 있듯이 "water"태그를 기반으로 한 http://pastebin.com/MWt5B0Aq은 일부 이미지에 "water", "watervogel", "waterloop"과 같은 키워드가 있습니다.

DISTINCT를 images.id에서 작동시키는 방법이 있습니까?

나는이 시도하지만 도움으로 그룹을하고겠습니까

SELECT DISTINCT images.id SQL_CALC_FOUND_ROWS tags.tag, tags_image.imageID, images.src FROM tags INNER JOIN tags_image ON tags.tagID = tags_image.tagID INNER JOIN images ON tags_image.imageID = images.id WHERE tag LIKE ? ORDER BY id DESC LIMIT ?, ? 

답변

1

도움이되지 않았다?

SELECT DISTINCT SQL_CALC_FOUND_ROWS tags.tag, tags_image.imageID, images.src FROM tags INNER JOIN tags_image ON tags.tagID = tags_image.tagID INNER JOIN images ON tags_image.imageID = images.id WHERE tag LIKE ? GROUP BY images.id ORDER BY id DESC LIMIT ?, ? 
+0

실제로 도움이되는 것 같습니다. 왜 그런 생각을하지 않았는지 확실하지 않습니다. –