2012-01-23 5 views
0

내가 그러나 그것은 예상대로 작동하지 않습니다,이 여분의 행을 반환,이 쿼리의 행 수를 계산하기 위해 노력하고있어, 그것은 12해야한다 예상대로 작동하지 않는,하지만 13MYSQL은

있어
$numPhotos = mysql_num_rows(mysql_query(" 
SELECT albums.id 
FROM albums, albumData 
WHERE 
(albumData.id=albums.albumID OR albums.albumID=0) 
AND 
albums.userID=$id 
AND albums.state=0 
AND albumData.state=0 
")); 

OR 문 부분을 제거하고 albumID = 0 인 행을 계산하지 않으면 11을 반환합니다. albumID가 0 인 행은 하나만 있지만 2로 계산합니다.

$numPhotos = mysql_num_rows(mysql_query(" 
SELECT albums.id 
FROM albums, albumData 
WHERE 
albumData.id=albums.albumID 
AND 
albums.userID=$id 
AND albums.state=0 
AND albumData.state=0 
")); 
+1

반환 된 행을 계산하는 대신 실제로 표시하는 경우 어떻게됩니까? 그러면 실제로 반환되는 내용이 표시되고 OR 절을 추가 할 때 표시되는 신비한 추가 행을 볼 수 있습니다. (PHP 코드를 엉망으로 만들고 싶지 않다면 mysql 명령 줄에 쿼리를 놓을 수 있습니다. 제대로 작동해야합니다.) – octern

답변

2

봅니다 사용하여 쿼리를 작성하는 가입 :

SELECT albums.id FROM albums 
LEFT JOIN albumData 
    ON albums.albumID=albumData.id 
    AND albums.state=0 
    AND albumData.state=0 
WHERE albums.userID=$id 

또는

SELECT albums.id FROM albums 
LEFT JOIN albumData 
    ON albums.albumID=albumData.id 
WHERE albums.userID=$id 
    AND albums.state=0 
    AND albumData.state=0 

이이 문제를 해결합니까?

편집 :
그냥 (*) 카운트 쿼리 열을 대체이

SELECT DISTINCT albums.id FROM albums 
INNER JOIN albumData 
    ON (albums.albumID = albumData.id OR albums.albumID = 0) 
    AND albums.state=0 
    AND albumData.state=0 
WHERE albums.userID=$id 
+0

그 중 아무 것도 계산하지 않습니다. 어디에 albums.albumID = 0입니다. (albums.albumID = 0은 다른 모든 앨범 ID와 마찬가지로 albumData에 없습니다.) albumID = 0은 앨범 테이블에있는 것입니다. 각 사용자의 기본 설정입니다 (내 앨범의 특정 앨범을 정의하기 위해 프로필 사진 앨범) –

+0

@DylanCross : 'LEFT JOIN'을 사용하여 편집 된 쿼리를 시도하십시오 – Marco

+0

이전처럼 11을 반환하고 앨범 ID = 0을 계산하지 않습니다. –

0

을 시도,이 같은 :

SELECT count(*) 
FROM albums, albumData 
WHERE 
(albumData.id=albums.albumID OR albums.albumID=0) 
AND 
albums.userID=$id 
AND albums.state=0 
AND albumData.state=0 

이 쿼리는 하나 개의 행을 & 열을 반환하고 그 것이다 쿼리에 의해 생성 된 행 수를 포함합니다.