2012-01-30 2 views
4

PHP/MySQL로 주석 처리 시스템을 구축하고 있습니다. 이 주석 달기 시스템은 사용자가 텍스트 (데이터베이스에서 "selected_text"로 저장 됨)를 강조 표시 할 수있게 해주는 멋진 기능을 가지고 있으며 강조 표시된 텍스트는 사용자가 작성한 주석과 함께 데이터베이스에 저장됩니다. 또한, (강조 표시된 텍스트가 표시된) 단락을 INT로 저장하고 있습니다. 이 값들은 모두 데이터베이스에 제대로 저장되어 있지만, 이제는 그것들과 함께하고 싶습니다.MySQL의 DISTINCT 행 수를 계산합니다.

"의견 카운터"를 만들고 싶습니다.이 주석 카운터는 기사의 각 단락 옆에 배치되며 해당 단락에 첨부 된 총 주석 수를 표시합니다. 은 "의견"의 시각적 개요 : 테이블 구조 :

$distinct = mysql_query("SELECT COUNT(DISTINCT paragraph_id) FROM comments");

그리고 해당 PHP 코드 :

This is a view of the table structure

내 최신 쿼리가이 정보를 검색을 시도 할 수있다

while ($result_three = mysql_fetch_array($distinct)) 
{ 
    echo $result_three['paragraph_id']; 
} 

자, 내가 잘못 생각한 것 같습니다. 먼저 DISTINCT paragraph_ids을 모두 찾는 쿼리를 실행하려고 시도했습니다. 그 다음에, 각각 paragraph_ids 횟수를 카운트하는 루프마다 을 실행합니다.

현재 도움이되고있는 쿼리가 내 목표를 달성하지 못하는 것 같아서 도움을 주시면 대단히 감사하겠습니다. 또한, "의견 카운터"에 계산 된 데이터를 명확하게 첨부 할 명확한 방법이 없다고 걱정됩니다.

답변

2

기본적으로, 당신은 단락 ID의 각 그룹의 의견을 계산해야합니다. 올바른 쿼리는 다음과 같습니다.

$distinct = mysql_query("SELECT paragraph_id, (DISTINCT comment_id) as comment_count FROM comments GROUP BY paragraph_id"); 

while ($result_three = mysql_fetch_array($distinct)) 
{ 
    echo $result_three['paragraph_id']; // Gives the id of the paragraph 
    echo $result_three['comment_count']; // Gives the comment count for the associated paragraph 
} 
+0

이것은 정확합니다. 추가 PHP 코드로 내 자신의 질문에 대답하려했지만 Stack Overflow newbs가 질문을 게시 한 후 8 시간 동안 그렇게하지 않게되었습니다! :) 고마워. – tandy

7

문제를 올바르게 이해하면 GROUP BY paragraph_id이 필요합니다. 이 시도 : 코드 아래

SELECT paragraph_id, COUNT(*) 
FROM comments 
GROUP BY paragraph_id 
+0

근접입니다. 고유 한 단락 ID 수를 계산합니다. 그것이 인쇄하는 가치는 3입니다. 내가 아는 바로는 아닙니다. 나는 이와 같은 것을 검색하려고 노력하고있다 : unique 인 모든 paragraph_id에 대해, 해당 paragraph_id에 작성된 주석의 총 개수를 센다. – tandy

+0

아니요, 각'paragraph_id'를 언급하는 주석 ('comments' 테이블의 행)을 반환합니다. 내 말은 phpMyAdmin에서 실행하십시오. – bfavaretto

+0

맙소사, 미안, 네 말이 맞아. 내 사과. 나는 PHP를 사용할 때 다른 결과를 얻고있었습니다. 문제는 fetch_array에서 올바른 키를 참조하지 않는다는 것입니다. 결국 나를 위해 일하는 것은 몇 가지 답변을 결합하고 궁극적으로 별칭을 호출하는 것이 었습니다. 도와 주셔서 감사합니다! – tandy

3

사용, 이것은 당신도 당신이 외부를 수행해야합니다 제로 의견이 단락에 가입 할 때 알고 싶은 것을

$res = mysql_query("SELECT COUNT(DISTINCT paragraph_id) as cnt FROM comments"); 

while ($result_three = mysql_fetch_assoc($res)) { echo $result_three['cnt']; } 
4

그것의 가능성을 작동합니다 .

SELECT p.paragraph_id, 
     COUNT(c.comment_id) as comment_count 
FROM comments c 
     RIGHT JOIN paragraphs p 
     ON c.paragraph_id = p.paragraph_id 
GROUP BY p.paragraph_id 

여기에 작업 data.se sample

+0

이것은 승자입니다.JOIN 구성 요소를 제외하여이 코드를 수정하고 comment_count 앞에 "AS"를 포함 시켰습니다. PHP에서 echo하는 내용은 입니다.'echo $ result = [ 'comment_count'];' 고마워요! – tandy

+0

감사합니다. 내 쿼리를 작성하기위한 훌륭한 기준이었습니다. 축하합니다. – HeavyHead