2011-04-25 2 views
0

사용자 ID에 따라 사용자 레코드 수를 계산하는 데 문제가 있습니다. 그러나 하위 매개 변수를 사용하여 2 개의 테이블에 하나의 계수 매개 변수를 포함하고 있지만 하위 쿼리를 사용하고 있습니다. 오류는 duplicate column name 'user_id입니다.중복 된 열 이름 'user_id'문제가 발생했습니다.

쿼리 :

$sql = "SELECT loc.location_id, 
       COUNT(loc.location_id) AS total_records 
     FROM locations loc 
     LEFT JOIN 
     (
      SELECT usr.*, 
        loc.* 
      FROM 
      (
       members usr 

       INNER JOIN locations loc 
      ) 
      WHERE usr.user_id = " . $user_id . " 
      AND usr.account_disabled = 0 
      ORDER BY loc.submit_date DESC 
     ) usr ON (loc.user_id = usr.user_id)"; 

나는 그것이 사용자의 정보와 COUNT 기능에 의해 수행 total_records 수를 반환하는 것입니다 필요로.

건배.

편집 :

이 내가이 SQL에 대해 반환받을 것입니다 :

SELECT loc.location_id, 
     loc.street_name, 
     loc.city, 
     loc.state, 
     loc.county, 
     loc.country, 
     usr.user_id, 
     usr.username, 
     COUNT(loc.location_id) AS total_records 
FROM locations loc 
INNER JOIN members usr ON (loc.user_id = usr.user_id)    
WHERE loc.user_id = $user_id 
AND usr.account_disabled = 0 
GROUP BY loc.location_id 

enter image description here

+1

그것은 PHP와 쿼리의 혼합에 "쿼리"입니다하지 않습니다 있습니다. 모든 변수를 제거하고 (실제 값으로 대체) 원시 SQL을 배치하십시오. – zerkms

답변

2

그것은 당신이 파생 된 결과 집합 또는 LEFT JOIN있어 정확히 왜 분명하지 않다. 이 시도 :

SELECT loc.location_id, 
      COUNT(loc.location_id) AS total_records 
FROM  LOCATIONS_TABLE loc 
INNER JOIN MEMBERS_TABLE usr 
     ON (loc.user_id = usr.user_id)    
WHERE loc.user_id = $user_id 
AND usr.account_disabled = 0 
GROUP BY loc.location_id 
+0

흠. 잘 작동하지만 단 하나의 레코드 만 반환합니다 (한 명의 사용자 만있는 user_id의 제한 때문에). 그러나 사용자가 여러 레코드를 처리 했으므로 사용자가 수행 한 레코드를 반환해야합니다 (레코드 수). – MacMac

+0

안녕하세요. 좀 도와 줄 수있어? :-) – MacMac

+0

그것은 작동하지 않는 것 같습니다, 나는 두렵습니다. 'COUNT (loc.location_id) AS total_records'를 제거하면 사용자 레코드가 표시됩니다. 하지만 거기에두면 1 명의 사용자 레코드가 반환됩니다. – MacMac

1

나는 문제가이 부분 생각 :

SELECT usr.*, 
     loc.* 

두 테이블이 USER_ID