2010-05-03 4 views
1

안녕하십니까!두 개의 쿼리를 사용해야합니까, 아니면 MySQL/PHP에서이 쿼리를 사용할 수 있습니까?

기본적으로 테이블을 사용하여 각 코드 항목의 태그를 저장하는 '태그'라는 테이블과 '코드 태그'라는 테이블을 교차하는 '코드'라는 기본 데이터를 저장합니다.

각 비트의 코드를 제출 한 사용자에 대한 정보를 저장하는 '사용자'라는 테이블도 있습니다.

내 홈페이지에 5 개의 결과가 데이터베이스에서 반환되기를 원합니다. 반환 된 각 결과는 코드의 제목, 요약을 나열한 다음 제출자의 ID를 기반으로 작성자의 이름을 가져와야합니다. 나는 이것을 지금까지 많이 달성했다 (woot!).

모든 태그를 수집하려고 할 때 내 문제가 있습니다. 이 순간에 이것은 꽤 큰 쿼리이고 그것은 나를 조금 겁주는 것입니다. 데이터를 찾고 그것을 반환 무엇

SELECT code.*, code_tags.*, tags.*, users.firstname AS authorname, users.id AS authorid 
FROM code, code_tags, tags, users 
WHERE users.id = code.author AND code_tags.code_id = code.id AND tags.id = code_tags.tag_id 
ORDER BY date DESC 
LIMIT 0, 5 

는 정확하지만 각 태그에 대한 몇 가지 반복 행 :

여기 내 문제가 쿼리입니다. 예를 들어 코드 항목에 3 개의 태그가있는 경우 3 개의 동일한 행을 반환합니다. 반환되는 3 개의 행 각각을 제외하고 태그가 변경됩니다. 말이 돼?

어떻게 변경하나요? 감사!

답변

3

당신은 GROUP_CONCAT을 시도해야는 :

SELECT code.*, 
     code_tags.*, 
     tags.*, 
     users.firstname AS authorname, 
     users.id AS authorid, 
     GROUP_CONCAT(tags.name SEPARATOR ', ') 
FROM code, code_tags, tags, users 
WHERE users.id = code.author AND code_tags.code_id = code.id AND tags.id = code_tags.tag_id 
GROUP BY code_id 
ORDER BY date DESC 
LIMIT 0, 5 
+0

와우,이 GROUP_CONCAT 꼬추에 대해 알고하지 않습니다. 분명히 그것을하는 가장 쉽고 간단한 방법처럼 보입니다. 나는 약간의 연구를하고 곧 다시보고 할 것이다. – Jack

+0

모든 작업. 나는 GROUP_CONCAT (tags.name SEPERATOR ',') 태그 그룹을 수행 한 다음 태그 그룹을 분해하고 각 항목을 통해 foreach했습니다. 좋은 분! – Jack

관련 문제