2011-01-09 8 views
0

나는 반환해야하는, MySQL의 쿼리 아래에있는 t1.username, t1.website, in_count (WHERE t2.type = 'in'), out_count (WHERE t2.type = 'out')와 WHEREt1.website 필드가 NOTEMPTY 또는 NULL이다.MySQL 쿼리가 제대로 작동하지 않습니다?

그러나 그가 (mysql_num_rows()를 통해) 한 결과를 반환하고, (또는 뭔가 잘못하고 있어요?) 고장 것 같았다 내가 print_r()합니다 (mysql_fetch_assoc()에), 컬럼의 키는 때 그들의 그러나 모든 값은 비어 있거나 비어 있습니다 (아래 참조).

print_r() 덤프 :

Array 
(
    [username] => 
    [website] => 
    [in_count] => 
    [out_count] => 
) 

MySQL의 쿼리 : 모든 분명하다

SELECT t1.username, 
     t1.website, 
     SUM(IF(t2.type = 'in', 1, 0)) AS in_count, 
     SUM(IF(t2.type = 'out', 1, 0)) AS out_count 
FROM users AS t1 
     JOIN referrals AS t2 
     ON t1.username = t2.author 
WHERE NOT Isnull(t1.website) 
LIMIT 0, 10 

희망, 당신은 더 많은 정보를 필요로하는 모든 도움을 주셔서 감사합니다 경우 알려주세요. : B

답변

2

끝에 GROUP BY 절이 필요할 것 같은데요? 아마도

GROUP BY t1.username, t1.website 

그런 식으로 특정 웹 사이트의 특정 사용자에 대한 모든 in/out 카운트를 얻을 수 있습니다.

SUM과 같은 집계 함수의 경우 쿼리에 GROUP BY 절이 필요하다는 인상을받습니다. 서버가 SQL을 받아 들인 것이 놀랍습니다.

+0

+1. 유감스럽게도 MySQL은 그러한 구문을 허용합니다. – bernie

+2

[설계 상, 슬프게도] (http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html); SQLite는이 기능을 지원하는 유일한 DB입니다. –

0

SUM() 함수는 집계이며 쿼리에 GROUP 문이 없으므로 아무 관계가 없습니다. PHP에서 mysql_error()의 내용을 출력하여 쿼리의 오류 상태를 항상 확인할 수 있습니다.이 경우에는 GROUP 문이 누락되었다고 할 수 있습니다.

쿼리를 기반으로 사용자와 참조가 일대 다 관계를 유지한다는 것이므로 t1.username (또는 테이블이있는 경우 사용자 ID) 등으로 그룹화해야합니다.

관련 문제