2012-02-23 2 views
0

SQL 쿼리를 작동하는 데 문제가 있습니다.왼쪽 조인을 사용하여 SQL 쿼리에 문제가 발생했습니다.

먼저 배경 정보 ... 사용자가 활동을 등록 할 수있는 일정 수의 이벤트가 있습니다. 사용자가 활동을 등록하면 해당 활동의 스팟 수가 하나씩 감소합니다. 사용자가 일정에서 삭제 된 경우 해당 활동의 스팟 수를 1로 늘리는 데 문제가 있습니다.

그래서 내 표는 다음과 같습니다.

Activities: this table is used to register users to a specific activity which is defined by table Activity 

+----+------------+----------------+----------+ 
| ID | activityID | activityUserID | eventID | 
+----+------------+----------------+----------+ 
| 1 |  1  |   2  |  1 | 
| 2 |  2  |   2  |  1 | 
| 3 |  3  |   2  |  1 | 
+----+------------+----------------+---------+ 

-ID는 각 행을 식별하는 고유 한 키입니다.

-activityID는 사용자가 가입 한 활동 (테이블 Activity.ID)을 참조하는 데 사용됩니다. 예 : 이벤트 1 활동 3에 대한 사용자 가입 한은 다음 activityID 3 것 및 이벤트 ID는

-activityUserID이

Activity: this table contains the activities and descriptions. 

+----+---------------------+-------------+---------+ 
| ID | activityDescription | activityNum | eventID | 
+----+---------------------+-------------+---------+ 
| 1 | test1    |  24  |  1 | 
| 2 | test2    |  24  |  1 | 
| 3 | test3    |  24  |  1 | 
+----+---------------------+-------------+---------+ 

-ID가이다이 이벤트에 가입 한 사용자의 ID입니다 BE1 것 식별을위한 고유 한 값. 이 값은

-activityNum 대해 어떤 활성 사용자 표지를 참조하는 테이블 활동 (activityID)에서 사용된다

여기서 특정 이벤트에 대한 고유 ID를 -eventID 가능한 오픈 스폿의 수는 문제가있는 검색어입니다.

UPDATE activity 
SET activity.activityNum = activity.activityNum + 1 
WHERE activity.eventID = ".$eventID." //$eventID is a obtained based on the page being viewed 
LEFT JOIN activities ON activity.eventID = activities.eventID 
WHERE activity.ID = activities.activityID 
+0

두 테이블 모두에 eventID가있는 이유는 무엇입니까? 테이블을 정규화 된 상태로 유지해야합니다. –

+0

이전 버전의 표를 복사/붙여 넣었지만 인식하지 못했습니다. 위의 코드를 업데이트하겠습니다. – user1104854

답변

3

귀하의 가입 구문이 올바르지 않지만 동의합니다. 당신이 무엇을 요구 할 수있는 적절한 방법은 다음과 같습니다이 구문은 당신이 당신이 의도인지 잘 모르겠어요 시도한 생산합니다

UPDATE activity 
LEFT JOIN activities ON activity.eventID = activities.eventID 
SET activity.activityNum = activity.activityNum + 1 
WHERE activity.ID = activities.activityID AND activity.eventID = $eventID 

있지만. 나는 테이블의 eventID가하는 일에 대해 혼란 스럽다. 활동을 "그룹화"하기로되어 있습니까?

+0

EventID는 활동이 수행되는 이벤트에 대한 참조입니다. – user1104854

+0

감사합니다. 작동하도록했습니다. – user1104854

관련 문제