2011-09-02 3 views
1

나는 두 개의 테이블을 가지고 : users, images. 사용자는 콘테스트에 참가하기 위해 지불 한 이미지의 숫자 인 paid 열을 가지고 있습니다. 이미지에는 entered 열에 입력하지 않은 경우 0, 입력 한 경우 1의 값이 있습니다. 각 사용자에 대해이 합계가 필요합니다.PHP mysql보다 큰 문제

입력 한 것보다 더 많은 이미지를 지불 한 모든 사용자에게 쿼리를 시도하고 있습니다. 코드는 당신이 지불하기 때문에 그 jcannon의 @와 레이 @가 목록에 있으면 안 볼 수

[email protected]  8 2 
[email protected] 3 3 
[email protected]  7 3 
[email protected] 5 1 
[email protected]  2 3 

여기

를 입력보다 크지입니다 :하지만 무엇 인쇄를 heres .. 제대로 작동하지 않습니다 :

$SQL = mysql_query("SELECT *, SUM(images.entered) 
         FROM users, images 
         WHERE users.id=images.owner 
         AND users.paid>'SUM(images.entered)' 
         GROUP BY users.id "); 

while($sendto=mysql_fetch_array($SQL)){ 
    print $sendto['email']." ".$sendto['paid']. 
      " ".$sendto['SUM(images.entered)']. "<br>"; 
} 

내가 뭘 잘못하고 있니?

+0

'SUM (images.entered)'이 실제로 인용되어 있습니까? 이것은 문자열이됩니다. > 연산자는 숫자 0으로 캐스팅합니다. 그래서 지불 한 사람이 모두 일치합니다. 제거 '... – johannes

+0

따옴표를 제거하면 0 결과가 표시됩니다 ... 따옴표로 결과가 나타납니다. 또한 0을 지불하고 0을 입력 한 사용자를 제거합니다. –

답변

6

먼저 인용 부호를 없애면 리터럴 문자열입니다. WHERE 대신,

… WHERE … GROUP BY … HAVING users.paid >= SUM(images.entered) … 

이 또한 내가 종종 많은 명확 조인 구문을 명시 적으로 사용하는 찾을 : 둘째, 당신은 단지 HAVING 절 집계 값을 비교할 수 있습니다

SELECT *, SUM(images.entered) 
FROM users 
INNER JOIN images 
ON users.id = images.owner 
GROUP BY users.id 
HAVING users.paid > SUM(images.entered) 
+0

따옴표를 제거하면 결과가 0이됩니다 ... 따옴표로 결과가 나타납니다. 또한 0을 지불하고 0을 입력 한 사용자를 삭제합니다. –

+0

Johnny보다 크거나 같음 ('> = ') – knittl

+0

결과가 아직 이상하지 않습니다. 왜냐하면'AND users.paid> = SUM (images.entered)'완전히. 내 결과가 모두'paid'와'sum (entered)'값을 올바르게 표시합니다. –

1

을 시도해보십시오 Mysql Having

* 양쪽 테이블에 일부 열 ID가있는 경우 join을 사용할 수 있습니다.

$SQL = mysql_query(" 
SELECT 
*, 
SUM(images.entered) as totalImage, 
FROM users 
INNER JOIN images on (users.id = images.owner) 
HAVING users.paid > totalImage 
GROUP BY users.id 

");