2012-08-11 2 views
2

복잡한 가입 쿼리가 작동합니다. 그러나 다른 테이블에서 필드를 가져 오는 것 외에도 특정 조건을 충족하는 레코드 수를 계산하려고합니다.MYSQL 구문 조건부 COUNT

예를 들어, 테이블 중 하나가 추종자이며, 내가 추종하는 사람이 몇 명인지 (사용자 ID로 식별 됨) 있는지를 계산하려고합니다. 이 수는 다른 uid가있는 팔로워에 관한 전체 조회의 레코드 수와 같지 않습니다.

COUNT 명령을 사용하여이 작업을 수행 할 수있는 방법이 있지만 구문에 대한 단서가 없다고 생각합니다.

다음은 쿼리 내에서 쿼리로 수행 할 수 있지만 지저분한 작업이며이를 수행하는 더 간단한 방법을 찾고 있습니다. 어떤 제안을 주셔서 감사합니다.

follow_table : ID, follower_id, 내가 당신을 이해한다면,이 한 쿼리에서 모든 수 있도록 도움이 followed_id

$res1 = mysql_query("SELECT * FROM follow_table WHERE follower_id= '$userid'"); 

//have list of all users this user is following 
while($row1 = mysql_fetch_array($res1)) 
{ 
    $followed_id = $row1['followed_id']; 
    $res2 = mysql_query("SELECT * FROM follow_table WHERE followed_id = '$followed_id'"); 
    echo mysql_num_rows($res2); // Echo the number of followers 
} 
+0

따라 서 팔로워의 수를 원하십니까? –

+0

예. 얼마나 많은 사람들이 당신뿐 아니라 그 사람을 추적하고 있습니다. – user1260310

답변

3
SELECT 
    f1.followed_id      --- all the people that $user follows 
    , COUNT(*)  AS followers  --- and the number of their followers 
FROM 
    follow_table AS f1 
    JOIN 
    follow_table AS f2 
     ON f2.followed_id = f1.followed_id 
WHERE 
    f2.follower_id = $userid   --- the specific $user 
GROUP BY 
    f1.followed_id ; 
+0

. 큰. 나는 COUNT (p. *)처럼 p.userid = f1.followed_id가 – user1260310

+0

인 것처럼 많은 사람이 따라 다니는 사진이있는 것처럼 다른 테이블에서 행을 조건부로 계산하는 방법이 있다고 가정하지 않습니다. 하나의 쿼리에서 서로 다른 테이블에 대해 두 개의 다른 개수를 계산하는 것은 복잡 할 수 있습니다. 다른 질문을 게시하는 것이 좋습니다. –

1
SELECT COUNT(*) FROM follow_table ft WHERE ft.follower_id= '$userid' AND (
SELECT COUNT(*) 
FROM follow_table ft2 
WHERE ft2.follower_id = ft.follower_id) > 0 

.

+0

아직 작동하지 않습니다. 2nd는 f2.followed_id = ft.followed_id가 될 것입니까? 또한, 제 2 절에서 수정 한 COUNT (*)를'countfollow '로 출력 한 다음 $ row ['countfollow ']를 echo했지만 결과를 얻지 못했습니다. – user1260310