2012-06-23 7 views
1
$sql = "SELECT * FROM books LEFT JOIN users 
      ON books.readby=users.user_id WHERE users.email IS NOT NULL"; 
    $result = mysql_query($sql); 
    while($row = mysql_fetch_array($result)) 
    { 
echo $row['readby']. " - read 10 books"; 
} //while ends 

이것은 지금까지 가지고있는 코드입니다. 나는 각 사용자가 읽은 책 수를 검색하려고 시도 중이고 결과를 표시합니다. user/id와 그/그녀가 읽는 책의 수를 반향 books 테이블은 다음과 같습니다 : id - name - pages - readby 행 readby는 사용자 ID를 포함합니다. 모든 아이디어/제안 사항이 있습니까? 나는 count()를 사용하는 것에 대해 생각하고 있었지만, 어떻게하는지에 대해서는 확실하지 않았습니다.mysql은 각 user_id에 대한 행의 총계를 반환합니다.

+0

답을 'DESC 사용자'의 덤프로 업데이트 할 수 있습니까? –

+0

무엇을 의미합니까? $ count = $ count [0]; 이게 뭐야? 당신은 배열의 첫 번째 항목에 변수 개수를 위치? why – cppit

+1

@fogsy이 코멘트는 관련 답변 바로 아래에 있지 않으므로 대답하겠습니다 ... mysql_fetch_array()는 숫자 키와 연관 키를 반환합니다. 그 문맥에서'$ row [0]'은'COUNT (user_id)'일 첫번째 열을 반환 할 것이다. –

답변

3

하위 쿼리는 사용자별로 읽은 책의 수를 반환 할 수 있습니다. 그것은 각 사용자에 대한 다른 컬럼을 검색하기 위해 주 테이블에 대해 왼쪽으로 다시 결합됩니다.

편집GROUP BY 생략했다 ... 다음 PHP에서

SELECT 
    users.*, 
    usersread.numread 
FROM 
    users 
    /* join all user details against count of books read */ 
    LEFT JOIN (
    /* Retrieve user_id (via readby) and count from the books table */ 
    SELECT 
     readby, 
     COUNT(*) AS numread 
    FROM books 
    GROUP BY readby 
) usersread ON users.user_id = usersread.readby 

, 당신은 결과를 가져 오는 후 $row['numread']를 검색 할 수 있습니다.

// Assuming you already executed the query above and checked errors... 
while($row = mysql_fetch_array($result)) 
{ 
    // don't know the contents of your users table, but assuming there's a 
    // users.name column I used 'name' here... 
    echo "{$row['name']} read {$row['numread']} books."; 
} 
+0

하위 쿼리가 얼마나 많은 곳에서 슬롯 될 수 있는지 놀랍게도 ... –

+0

@JaredFarrish MySQL은 'GROUP BY'의 내용에 대해 용서를 베푸기 때문에이 경우 부질의 조인은 아마도 필요하지 않습니다. –

+0

필드 목록에서 하위 쿼리를 실행해도 여전히 작동합니까? –

3

당신은 count()이 방법을 사용할 수 있습니다

<?php 
    $count = mysql_fetch_array(mysql_query("SELECT COUNT(`user_id`) FROM books LEFT JOIN users ON books.readby=users.user_id WHERE users.email IS NOT NULL GROUP BY `user_id`")); 
    $count = $count[0]; 
?> 

희망이 도움이! :)

+0

나는 OP가 각 사용자가 읽은 책의 수를 찾고 싶다고 생각합니다. 이것은 "사용자가 읽는 책이 몇 권입니까?"라고 말합니다. –

+1

어떻게 이것이 4 개의 upvotes를 가질 수 있습니까? OP가 요구하는 것과는 아무런 관련이 없습니다. 이 쿼리는 모든 사용자가 읽은 총 도서 수, 즉 'books'행의 총 수를 포함하는 _one row_를 반환합니다. 그 위에 PHP 코드는 쿼리에 대한 오류 검사를 수행하지 않습니다. –

관련 문제